iiioroh Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но **** аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это *****. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. Надіслати Поділитися на інших сайтах More sharing options...
buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 Не вижу проблем, если только дело в деньгах - в невозможности себе позволить. 2 Надіслати Поділитися на інших сайтах More sharing options... legioner26 Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 3 часа назад, iiioroh сказал: Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но суко аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это жопа. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. Я думаю в Вашем случае надо становиться разработчиком. Я в 2017 так и сделал ))). До этого и понятие не имел что такое PHP ))) 2 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 5 часов назад, iiioroh сказал: Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но суко аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это жопа. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? 1 Надіслати Поділитися на інших сайтах More sharing options... gregoro Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 (змінено) 1 час назад, Dimasscus сказал: раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. Змінено 6 травня 2020 користувачем gregoro 1 Надіслати Поділитися на інших сайтах More sharing options... Seriusis Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это *****. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. На все случаи жизны вы модулей не найдете. Зачем тогда нужны бы были услуги разработчиков ?) Везде и всегда есть какой то кастомный код, если не весь проект в целом, то какая то его часть, только если это не простая витрина на пару десятков товаров ) По моему модулей более чем достаточно, ну а на "что-нибудь эдакое" какой смысл разрабатывать модуль, тратить сотни часов, если оно очень специфичное и никому не нужно ? Да и есть много классных специалистов, которые сделают любой функционал, главное уместь найти их, и готовность выделить бюджет. Я вас понимаю конечно, вы хотите установкой модуля весь проект запилить, но не все проекты стандартные, и, честно говоря, это даже хорошо, потому как разработка, которая заключается в заливке модуля и обновлении модификаторов, не разработка, а администрирование. А это совсем разные услуги 1 Надіслати Поділитися на інших сайтах More sharing options... mazein Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. 5 Надіслати Поділитися на інших сайтах More sharing options... anboza Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 так и не понял "вопль"... для того, чтобы быть независимым и исполнять любую прихоть, нужно самому писать, или заказывать кастомные доработки. Вы же считаете, что на все случаи жизни, даже самые не вообразимые, должен быть модуль, который выставлен "в тираж", а значит не дорого за лизензию. Быть посредником - это да, дело не благодарное. Но в том и суть, что сам ничего не делаешь, а имешь % от заказов...Терпите, батенька )) 1 Надіслати Поділитися на інших сайтах More sharing options... HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Вопль вопиющего в пустыне! Наболело! Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
legioner26 Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 3 часа назад, iiioroh сказал: Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но суко аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это жопа. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. Я думаю в Вашем случае надо становиться разработчиком. Я в 2017 так и сделал ))). До этого и понятие не имел что такое PHP ))) 2 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 5 часов назад, iiioroh сказал: Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но суко аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это жопа. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? 1 Надіслати Поділитися на інших сайтах More sharing options... gregoro Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 (змінено) 1 час назад, Dimasscus сказал: раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. Змінено 6 травня 2020 користувачем gregoro 1 Надіслати Поділитися на інших сайтах More sharing options... Seriusis Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это *****. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. На все случаи жизны вы модулей не найдете. Зачем тогда нужны бы были услуги разработчиков ?) Везде и всегда есть какой то кастомный код, если не весь проект в целом, то какая то его часть, только если это не простая витрина на пару десятков товаров ) По моему модулей более чем достаточно, ну а на "что-нибудь эдакое" какой смысл разрабатывать модуль, тратить сотни часов, если оно очень специфичное и никому не нужно ? Да и есть много классных специалистов, которые сделают любой функционал, главное уместь найти их, и готовность выделить бюджет. Я вас понимаю конечно, вы хотите установкой модуля весь проект запилить, но не все проекты стандартные, и, честно говоря, это даже хорошо, потому как разработка, которая заключается в заливке модуля и обновлении модификаторов, не разработка, а администрирование. А это совсем разные услуги 1 Надіслати Поділитися на інших сайтах More sharing options... mazein Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. 5 Надіслати Поділитися на інших сайтах More sharing options... anboza Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 так и не понял "вопль"... для того, чтобы быть независимым и исполнять любую прихоть, нужно самому писать, или заказывать кастомные доработки. Вы же считаете, что на все случаи жизни, даже самые не вообразимые, должен быть модуль, который выставлен "в тираж", а значит не дорого за лизензию. Быть посредником - это да, дело не благодарное. Но в том и суть, что сам ничего не делаешь, а имешь % от заказов...Терпите, батенька )) 1 Надіслати Поділитися на інших сайтах More sharing options... HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Вопль вопиющего в пустыне! Наболело! Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 5 часов назад, iiioroh сказал: Всем здравствуйте. Начну с того что я модульный задрот 80 уровня Модулей у меня много и я считаю что любую проблему нужно решать модулем. И еще я задрот Journal, ибо должно быть красиво и юзабельно и на телефонах тоже. Я к чему это вообще начал. Тут появились посты мол сделаем форум лучше. Я только за! Давно в зоне ру какой-то разброд и шатания. Вот мне это капец как неудобно. У буржуев я иду на opencart.com и там все покупаю. Удобно - все в одном месте. У нас же какое-то лоскутное одеяло. Магазинов и сайтов по опенкарту развелось множество. Это тут, это там, все в разных местах. Каждый разраб считает делом чести завести свой магазин приложений. Я не против. Я сторонник того чтобы платить разрабам за их труд. Но дошло до того, что купил уже модуль на варезнике и вместо автора заплатил хрен знает кому. Хорошо вовремя разобралься. Зато раньше было прекрасно, все что в зоне ру я искал на - opencartforum.com И для меня это была гарантия моей работы в белую. Гарантия того что модуль не бросят и будут развивать дальше. А не так что я подсяду на модуль, а он сдуется. Потом какие-то тяжбы между собой можно как-то решать так, чтобы я не страдал. Вот к примеру я подсел на некоторые модули нео-сео. И где сейчас они? Неужели настолько недоговороспособные, что их убрали с форума. А между тем у них лучший модуль обмена с 1С, со складами и прочим, и можно людям заплатить и они прикрутят еще функции и при этом будут тащить их из версии в версию. Ну да не о них даже речь. Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть, но суко аглицкий язык вымораживает заказчика. А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. Мне вот например нужно модуль заказа как на megazip.ru, но чёто до сих пор никого не нашел. Зато у каждого сайт со своим барахлом. А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это жопа. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? 1 Надіслати Поділитися на інших сайтах More sharing options...
gregoro Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 (змінено) 1 час назад, Dimasscus сказал: раз уж вы затронули нео сео- проблема с ними в том- что техподдержка ни какая. и ждать ответа можно неделями. а код модулей закодирован. недавний пример- модуль выгрузки в ямаркет, заказчику пришло в голову желание- выгружать в yml ссылки на товары которые отключены на сайте. казалось бы- простая правка модели занимающая 15 минут с перекуром- но нет! :)) модели закодированы, поддержка неделю игрнорирует запрос на внесение правок, по концовке предложив вариант- 35 долларов за внесение правки. вы считаете это нормальный подход? Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. Змінено 6 травня 2020 користувачем gregoro 1 Надіслати Поділитися на інших сайтах More sharing options...
Seriusis Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Ибо заказчик креативит, а это *****. Это только по тем проектам которые постоянно веду уже более пяти лет. А многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным. На все случаи жизны вы модулей не найдете. Зачем тогда нужны бы были услуги разработчиков ?) Везде и всегда есть какой то кастомный код, если не весь проект в целом, то какая то его часть, только если это не простая витрина на пару десятков товаров ) По моему модулей более чем достаточно, ну а на "что-нибудь эдакое" какой смысл разрабатывать модуль, тратить сотни часов, если оно очень специфичное и никому не нужно ? Да и есть много классных специалистов, которые сделают любой функционал, главное уместь найти их, и готовность выделить бюджет. Я вас понимаю конечно, вы хотите установкой модуля весь проект запилить, но не все проекты стандартные, и, честно говоря, это даже хорошо, потому как разработка, которая заключается в заливке модуля и обновлении модификаторов, не разработка, а администрирование. А это совсем разные услуги 1 Надіслати Поділитися на інших сайтах More sharing options... mazein Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. 5 Надіслати Поділитися на інших сайтах More sharing options... anboza Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 так и не понял "вопль"... для того, чтобы быть независимым и исполнять любую прихоть, нужно самому писать, или заказывать кастомные доработки. Вы же считаете, что на все случаи жизни, даже самые не вообразимые, должен быть модуль, который выставлен "в тираж", а значит не дорого за лизензию. Быть посредником - это да, дело не благодарное. Но в том и суть, что сам ничего не делаешь, а имешь % от заказов...Терпите, батенька )) 1 Надіслати Поділитися на інших сайтах More sharing options... HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Вопль вопиющего в пустыне! Наболело! Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
mazein Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 6 часов назад, iiioroh сказал: многим отказываю, ибо оперется пока на Вас господа-разработчики не представляется возможным Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. 5 Надіслати Поділитися на інших сайтах More sharing options... anboza Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 так и не понял "вопль"... для того, чтобы быть независимым и исполнять любую прихоть, нужно самому писать, или заказывать кастомные доработки. Вы же считаете, что на все случаи жизни, даже самые не вообразимые, должен быть модуль, который выставлен "в тираж", а значит не дорого за лизензию. Быть посредником - это да, дело не благодарное. Но в том и суть, что сам ничего не делаешь, а имешь % от заказов...Терпите, батенька )) 1 Надіслати Поділитися на інших сайтах More sharing options... HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Вопль вопиющего в пустыне! Наболело! Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
anboza Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 так и не понял "вопль"... для того, чтобы быть независимым и исполнять любую прихоть, нужно самому писать, или заказывать кастомные доработки. Вы же считаете, что на все случаи жизни, даже самые не вообразимые, должен быть модуль, который выставлен "в тираж", а значит не дорого за лизензию. Быть посредником - это да, дело не благодарное. Но в том и суть, что сам ничего не делаешь, а имешь % от заказов...Терпите, батенька )) 1 Надіслати Поділитися на інших сайтах More sharing options... HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options... Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Вопль вопиющего в пустыне! Наболело!
HyperLabTeam Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 14 минут назад, mazein сказал: Это заказчик на Вас опереться не может, потому что Вы, как посредник, можете предложить только чьё-то готовое решение. Проблема тут конкртено в Вас самом. он джурнальный шпион. тык тык и готово. касарь в карман рубль разрабу 3 Надіслати Поділитися на інших сайтах More sharing options...
Dimasscus Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, gregoro сказал: Хз, мне они помогли и бесплатно. Стоял их модуль по смс. Помогли с обновлением (у меня оочень старая версия стояла). А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? У меня вот модуль выгрузки в Маркет от другого автора. Мне нужно запустить абсолютно штатный функционал - выгрузку по хрону. Ибо я, видимо, прописываю команду не так и она не работает. И я его прошу помочь ПЛАТНО. Не ною в стиле "вы должны!". А готов оплатить работу (для спеца там минут 5-7 работы). В личке он вообще делает вид, что сообщения не видит. А на форуме отвечает с задержкой недели в 2. И ответы в стиле "Дак у вас луна в третьем доме, а вам надо делать через ретроградный меркурий". Да, я не прогер, но вопросы у меня более чем корректно поставлены, ибо 97% других разрабов прекрасно меня понимают даже без уточнений. Нормально тоже?? Так что подобного нудизма везде хватает. А правки, не заявленные в изначальном функционале, почему должны делаться бесплатно? - а ни кто и не просил бесплатно. так как из за закубленого кода модели я не могу сам поправить 2 строчки- я попросил это сделать поддержку. написал на почту- отправили на форум. на форуме неделю не отвечают на мой вопрос. и да-35 баксов это не цена правок данного типа. 1 Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 4 минуты назад, Dimasscus сказал: и да-35 баксов это не цена правок данного типа. Это они над вами сжалились С клиента запросили 40$ за аналогичную правку При этом я даже сказал им в какой месте поправить.. и что прописать Ну ладно здесь не о них 7 часов назад, iiioroh сказал: Многих модулей просто нет аналогов буржуйским. Модули сбора статистики просто прелесть Насчет прелести не скажу, но таки да есть.. А много ли из данного сообщества нужна такая статистика, чтоб писать полный функционал? 7 часов назад, iiioroh сказал: А уж у кого заказать модуль я вообще молчу. Или все супер занятые или не хватает компетенции. А на бурж? Там все компетентны? И у все есть время? 7 часов назад, iiioroh сказал: А мне перманентно требуется что-нибудь эдакое. Так оторвите от себя - отдайте разработчику 100%, не свои 60. 2 Надіслати Поділитися на інших сайтах More sharing options... iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options... Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
iiioroh Опубліковано: 6 травня 2020 Автор Share Опубліковано: 6 травня 2020 (змінено) Тут некоторые за постом не то увидели. Вопрос ведь совсем не в неосео. Хотя адекватные ответы есть, но в целом после такого общения желание это делать отпадает в принципе. От неосео обмен лучше или хуже работать не стал ни у кого. И сайт у них с форумом есть. Но меня ломает среди 3 сотен моих модулей лазить и искать что, где и когда куплено. Хочеться в одном месте все это видеть. Причем русифицированное и адаптированное под Ocstore. Как-то ломает меня одной болгарской фирме за то что у меня не читый opencart по 150$ за час допилов плотить. По сравнению с которыми - ценник неосео кажется просто незрелым детством. А разрабам за аутсортинг я всегда честно отдаю. Делаю скрин переписки и показываю клиенту. Хочет платит, как правило хочет. Но один раз отказался когда за модуль оплат 55 тыров рублей увидел. Змінено 6 травня 2020 користувачем iiioroh 2 Надіслати Поділитися на інших сайтах More sharing options...
Loriner Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 18 часов назад, iiioroh сказал: ибо должно быть красиво и юзабельно и на телефонах тоже. Уже должно звучать так: красиво и юзабельно и на десктопах тоже. 70-75% трафика в магазине с мобильных устройств. Считаю, что сейчас шаблоны нужно разрабатывать в первую очередь под мобильный телефон. Проблема с модулями связана скорее с проблемой самого опенкарта - не так много не то что крупных, но и средних проектов. Следовательно, нет спроса на модули, актуальные средним магазинам. В свое время столкнулся с отсутствием модуля для расчета доставки по API почты России. Как так? Десятки тысяч магазинов, самый распространенный и дешевый способ доставки, а модуля нет. Видимо нет спроса - нет предложений. Пошел искать исполнителя, кто возьмется за написание. Нашел не с первого раза и не на форуме в итоге. С горем пополам ушло 3,5 месяца , кучу раз отправлял в доработку. Много потраченного времени несмотря на "бесконечный бюджет". Потребовался модуль подбора ламп, по сути видоизмененный модуль категорий. Предпринимал несколько попыток найти разработчика, бюджет резиновый. Безуспешно. Нету свободных спецов. Хорошие разработчики либо заняты сопровождением нескольких постоянных клиентов либо сопровождением и развитием модулей. 1 Надіслати Поділитися на інших сайтах More sharing options...
buslikdrev Опубліковано: 6 травня 2020 Share Опубліковано: 6 травня 2020 1 час назад, Loriner сказал: API почты России 3 варианта Спойлер if ($to) { $type = 1; $charset = 'UTF-8'; $pochtaToken = 'TestAccessToken'; $pochtaUser = explode('|', 'login|password'); if ($type == 1) { //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate //https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom $postcalcServer1 = 'https://otpravka-api.pochta.ru/1.0/tariff'; $pochtaToken = $this->config->get('config_delivery_post_russia_token'); $pochtaUser = explode('|', $this->config->get('config_delivery_post_russia_user')); } elseif ($type == 2) { //https://postprice.ru/api/ $postcalcServer1 = 'https://postprice.ru/engine/russia/api.php'; } else { $postcalcServer1 = 'http://api.postcalc.ru/'; $postcalcServer2 = 'http://test.postcalc.ru/'; } $header = array(); $header[] = 'Authorization: AccessToken ' . $pochtaToken; $header[] = 'X-User-Authorization: Basic ' . base64_encode($pochtaUser[0] . ':' . $pochtaUser[1]); $header[] = 'Content-Type: application/json;charset=' . $charset; $timeout = 3; $cacheDir = DIR_CACHE; //sys_get_temp_dir(); $cacheValid = 600; if ($checkout) { $weight = 0; $length = array(); $width = 0; $height = array(); $valuation = 0; $this->load->model('catalog/product'); $products = $this->cart->getProducts(); $products_count = $this->cart->countProducts(); foreach ($products as $product) { $price = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); $valuation += $price * $product['quantity']; if ($product['weight_class_id'] == 2) { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) : $defaultWeight * $product['quantity']; } } else { if ($products_count > 1) { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : 1 * $product['quantity']; } else { $weight += $product['weight'] > 0 ? (round($product['weight']) * $product['quantity']) * 1000 : $defaultWeight * $product['quantity']; } } if ($product['length_class_id'] == 2) { $product['length'] = $product['length'] / 10; $product['width'] = $product['width'] / 10; $product['height'] = $product['height'] / 10; } $length[] = $product['length'] ? round($product['length']) : $defaultLength; $width += $product['width'] ? round($product['width'] * $product['quantity']) : $defaultWidth * $product['quantity']; $height[] = $product['height'] ? round($product['height']) : $defaultHeight; } $length = max($length); $height = max($height); //$valuation = $this->currency->format($valuation, $this->session->data['currency']); } else { $weight = $defaultWeight; $valuation = $defaultValuation; } if ($type == 1) { $queryString = array(); $queryString['index-from'] = rawurlencode($from); $queryString['index-to'] = rawurlencode($to); $queryString['mail-category'] = 'WITH_DECLARED_VALUE'; $queryString['mail-type'] = 'PARCEL_CLASS_1'; $queryString['declared-value'] = preg_replace('/[^0-9]/', '', $valuation); $queryString['mass'] = $weight; $queryString['dimension'] = array('length' => $length, 'width' => $width, 'height' => $height); $queryString['fragile'] = 'false'; $queryString['transport-type'] = 'SURFACE'; //$queryString = http_build_query($queryString); $queryString = json_encode($queryString); // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'pochta_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, $postcalcServer1); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($curl, CURLINFO_HEADER_OUT, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $queryString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['status'] != 'ERROR') { file_put_contents($cacheFile, $response); } } //var_dump($queryString); //var_dump($arrResponse); if ($arrResponse['status'] == 'ERROR') { $data['enabled'] = false; $data['error'] = $arrResponse['status'] . ' ' . $arrResponse['message'] . ' https://otpravka.pochta.ru/specification#/nogroup-rate_calculate_py_custom'; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (int)$arrResponse['total-rate'] / 100; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum((int)$arrResponse["delivery-time"]['max-days'] + $timePlus, $this->declension); } } elseif ($type == 2) { $queryString = 'from=' . rawurlencode($from); $queryString .= '&to=' . rawurlencode($to); $queryString .= '&mass=' . $weight; $queryString .= '&valuation=' . preg_replace('/[^0-9]/', '', $valuation); $queryString .= '&vat=' . 0; // 1 значит есть НДС 20% // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . 'postprice_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = json_decode(file_get_contents($cacheFile), true); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); curl_close($curl); // Переводим ответ в массив PHP $arrResponse = json_decode($response, true); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['code'] == 100) { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['code'] != 100) { $data['enabled'] = false; if ($arrResponse['code'] == 101) { $message = 'Некорректное значение массы отправления'; } elseif ($arrResponse['code'] == 102) { $message = 'Некорректный индекс отправителя'; } elseif ($arrResponse['code'] == 103) { $message = 'Некорректный индекс получателя'; } elseif ($arrResponse['code'] == 104) { $message = 'Отправка в данное ОПС невозможна'; } elseif ($arrResponse['code'] == 105) { $message = 'Исчерпан лимит запросов'; } else { $message = 'ищите ответ тут: https://postprice.ru/'; } $data['error'] = $arrResponse['code'] . ' ' . $message; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = (float)$arrResponse['pkg_val_1class']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum(5 + $timePlus, $this->declension); } } else { header("Content-Type: text/html; charset=$charset"); $queryString = 'f=' . rawurlencode($from); $queryString .= '&t=' . rawurlencode($to); $queryString .= "&w=$weight&v=$valuation&c=RU&o=php&cs=$charset"; // Проверяем в кэше, не было ли уже такого запроса $cacheFile = $cacheDir . '/postcalc_' . md5($queryString) . '.txt'; // Очищаем кэш от устарелых данных - все файлы старше $cacheValid сек. $timestampNow = time(); if (file_exists($cacheFile) && $timestampNow - filemtime($cacheFile) > $cacheValid) { unlink($cacheFile); } if (file_exists($cacheFile)) { $arrResponse = unserialize(file_get_contents($cacheFile)); } else { // Инициализируем curl if (function_exists('curl_init')) { $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => $timeout, CURLOPT_HTTPHEADER => array('Connection: close', 'Accept-Encoding: gzip'), CURLOPT_USERAGENT => phpversion())); } else { die("Не установлен пакет php-curl!"); } // Соединяемся с рабочим сервером curl_setopt($curl, CURLOPT_URL, "$postcalcServer1?$queryString"); $response = curl_exec($curl); if (!$response = curl_exec($curl)) { // Если по какой-то причине рабочий сервер недоступен, переходим на резервное зеркало curl_setopt($curl, CURLOPT_URL, "$postcalcServer2?$queryString"); if (!$response = curl_exec($curl)) { curl_close($curl); return $data['error'] = "Не удалось соединиться с $postcalcServer1 и $postcalcServer2 в течение $timeout сек.!"; } } curl_close($curl); // Разархивируем ответ if (substr($response, 0, 3) == "\x1f\x8b\x08") { $funcOverload = ini_get("mbstring.func_overload"); if (in_array($funcOverload, array(2, 3, 6, 7,))) { $response = gzinflate(substr($response, 10, -1)); } else { $response = gzinflate(substr($response, 10, -8)); } } // Переводим ответ в массив PHP $arrResponse = unserialize($response); // Если ошибки не было, сохраняем ответ в кэше if ($arrResponse['Status'] == 'OK') { file_put_contents($cacheFile, $response); } } //var_dump($arrResponse); if ($arrResponse['Status'] != 'OK') { $data['enabled'] = false; $data['error'] = $arrResponse['Status']; $this->log->write($data['error']); $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } else { $price = $arrResponse['Отправления']['ЦеннаяПосылка']['Доставка']; if ($percentagePlus) { $data['price'] = round($price * $percentagePlus / 100 + $price); } else { $data['price'] = $price + $pricePlus; } if ($this->offpizdecprice && $valuation > $freeDelivery) { $data['price'] = 0; } $data['time'] = $this->custom->declOfNum($arrResponse['Отправления']['ЦеннаяПосылка']['СрокДоставки'] + $timePlus, $this->declension); } } } else { $data['price'] = $defaultPrice; $data['time'] = $defaultTime; } 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 4
Recommended Posts