Перейти к содержанию
Форум поддержки пользователей VamShop

Почта России


Рекомендуемые сообщения

Не считает модуль сколько будет доставка в чем может быть проблема? модуль почты росии считает только вот этот RussianPostCalc но в него нельзя добавить дополнительную сумму 

Ссылка на сообщение
Поделиться на другие сайты

Вес указан у товара?!

Регион выбирается при оформлении заказа?!

Модуль всё равно точно считать не будет, так что я б за точностью подсчёт не глался, а использовать тот же RussianPostCalc

Ссылка на сообщение
Поделиться на другие сайты

RussianPostCalc я рад его использовать он точно считает но не добавить к сумме 130 рублей или както можно вписать чтобы он добовлял, по поводу модуля почты росии то вес указан регионы забиты и выбираются зоны тоже выбираются и забиты но не читает .

Ссылка на сообщение
Поделиться на другие сайты

Почему не добавить?!

Откройте файл /app/Plugin/Shipping/Controller/RussianPostCalController.php и поменяйте строку:

		return $shipping_cost;

на:

		return $shipping_cost+130;

 

Ссылка на сообщение
Поделиться на другие сайты

Не за что, я правда не пробовал этот код, но, по идее, должно работать, т.е. к той стоимости, что рассчитывает сервис russianpostcal.ru добваляется 130

Ссылка на сообщение
Поделиться на другие сайты

не могу найти 

<?php 
/* -----------------------------------------------------------------------------------------
   VamShop - http://vamshop.com
   -----------------------------------------------------------------------------------------
   Copyright (c) 2014 VamSoft Ltd.
   License - http://vamshop.com/license.html
   ---------------------------------------------------------------------------------------*/
App::uses('ShippingAppController', 'Shipping.Controller');

class RussianPostCalcController extends ShippingAppController {
    public $uses = array('ShippingMethod');
    public $module_name = 'RussianPostCalc';
    public $icon = 'russianpost.png';

    public function settings ()
    {
        $this->set('data', $this->ShippingMethod->findByCode($this->module_name));
    }

    public function install()
    {

        $new_module = array();
        $new_module['ShippingMethod']['active'] = '1';
        $new_module['ShippingMethod']['default'] = '0';
        $new_module['ShippingMethod']['name'] = Inflector::humanize($this->module_name);
        $new_module['ShippingMethod']['icon'] = $this->icon;
        $new_module['ShippingMethod']['code'] = $this->module_name;

        $new_module['ShippingMethodValue'][0]['shipping_method_id'] = $this->ShippingMethod->id;
        $new_module['ShippingMethodValue'][0]['key'] = 'api_key';
        $new_module['ShippingMethodValue'][0]['value'] = 'russianpostcalc.ru';

        $new_module['ShippingMethodValue'][1]['shipping_method_id'] = $this->ShippingMethod->id;
        $new_module['ShippingMethodValue'][1]['key'] = 'api_password';
        $new_module['ShippingMethodValue'][1]['value'] = 'russianpostcalc.ru';

        $new_module['ShippingMethodValue'][2]['shipping_method_id'] = $this->ShippingMethod->id;
        $new_module['ShippingMethodValue'][2]['key'] = 'store_zip_code';
        $new_module['ShippingMethodValue'][2]['value'] = '101000';

        $this->ShippingMethod->saveAll($new_module);

        $this->Session->setFlash(__('Module Installed'));
        $this->redirect('/shipping_methods/admin/');
    }

    public function uninstall()
    {

        $module_id = $this->ShippingMethod->findByCode($this->module_name);

        $this->ShippingMethod->delete($module_id['ShippingMethod']['id'], true);
            
        $this->Session->setFlash(__('Module Uninstalled'));
        $this->redirect('/shipping_methods/admin/');
    }

    public function calculate ()
    {
        global $order;

        $api_key = $this->ShippingMethod->ShippingMethodValue->find('first', array('conditions' => array('key' => 'api_key')));
        $api_key = $api_key['ShippingMethodValue']['value'];

        $api_password = $this->ShippingMethod->ShippingMethodValue->find('first', array('conditions' => array('key' => 'api_password')));
        $api_password = $api_password['ShippingMethodValue']['value'];

        $store_zip_code = $this->ShippingMethod->ShippingMethodValue->find('first', array('conditions' => array('key' => 'store_zip_code')));
        $store_zip_code = $store_zip_code['ShippingMethodValue']['value'];

        $total_weight = 0;
        
        foreach($order['OrderProduct'] AS $products)
        {
            $total_weight += (int) $products['weight']*$products['quantity'];
        }
            
    //запрос расчета стоимости отправления из 101000 МОСКВА во ВЛАДИМИР 600000.
    $ret = $this->russianpostcalc_api_calc($api_key, $api_password, $store_zip_code, $order['Order']['bill_zip'], $total_weight, $order['Order']['total']);
    
    //if (isset($ret['msg']['type']) && $ret['msg']['type'] == "done")
    //{
        //echo "success! codepage: UTF-8 <br/>";
        //print_r($ret);
        //echo "<br/>";
    //}else
    //{
        //echo "error! codepage: UTF-8 <br/>";
        //print_r($ret);
        //echo "<br/>";
    //}

        return $ret['calc'][1]['cost'];
    }

    public function before_process()
    {
    }
    
private function _russianpostcalc_api_communicate($request)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "http://russianpostcalc.ru/api_v1.php");
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($curl);
    
    curl_close($curl);
    if($data === false)
    {
    return "10000 server error";
    }
    
    $js = json_decode($data, $assoc=true);
    return $js;
}

private function russianpostcalc_api_calc($apikey, $password, $from_index, $to_index, $weight, $ob_cennost_rub)
{
    $request = array("apikey"=>$apikey, 
                        "method"=>"calc", 
                        "from_index"=>$from_index,
                        "to_index"=>$to_index,
                        "weight"=>$weight,
                        "ob_cennost_rub"=>$ob_cennost_rub
                    );

    if ($password != "")
    {
        //если пароль указан, аутентификация по методу API ключ + API пароль.
        $all_to_md5 = $request;
        $all_to_md5[] = $password;
        $hash = md5(implode("|", $all_to_md5));
        $request["hash"] = $hash;
    }

    $ret = $this->_russianpostcalc_api_communicate($request);

    return $ret;
}
    
}

?>

Ссылка на сообщение
Поделиться на другие сайты
  • 4 weeks later...

Александр как вписать паспортные данные ? 

API. Метод print_f116. Печать сопроводительного бланка ф.116

Доступ с аутентификацией по API ключу + API паролю. Все аргументы запроса обязательны.

Аргументы запроса

[in] apikey API ключ Вашего аккаунта.
[in] method print_f116
[in] f116_onepage Значение 1 или 0. Если 1, то форма 116 печатается на 1 листе А4, иначе на двух листах А5
[in] print0 Значение 1 или 0. Если 1, то нулевая объявленная ценность и наложенный платеж печатается как 0 руб., иначе остается пустое место
[in] list Массив данных о почтовых отправлениях закодированный JSON. Данные параметры печатаются без проверки. Что введено, то будет напечатано. Указывайте телефонный номер для отправления уведомлений по СМС, по факту прихода отправления в почтовое отделение (в разработке)
  • 'from_country' - страна места отправления
  • 'from_index' - почтовый индекс места отправления
  • 'from_state' - область/регион
  • 'from_city' - город/населенный пункт
  • 'from_addr' - обратный адрес отправителя (улица, дом, квартира/офис)
  • 'from_fio' - ФИО или наименование организации отправителя
  • 'p_seriya' - серия паспорта
  • 'p_nomer' - номер паспорта
  • 'p_vidan' - дата выдачи (формат: ДД.ММ.ГГГГ)
  • 'p_vidal' - наименования учреждения выдавшего паспорт
  • 'to_country' - страна места получения
  • 'to_index' - почтовый индекс получателя
  • 'to_state' - область/регион
  • 'to_city' - город/населенный пункт
  • 'to_addr' - адрес получателя (улица, дом, квартира/офис)
  • 'to_fio' - ФИО или наименование организации получателя
  • 'to_tel' - телефонный номер получателя (формат: +7XXXXXXXXXX, 8XXXXXXXXXX, 7XXXXXXXXXX)
  • 'order_id' - номер заказа (в Вашей системе учета)
  • 'ob_cennost_rub' - сумма объявленной ценности
  • 'nalogka_rub' - сумма наложенного платежа
[in] hash Обязательный аргумент

Аргументы ответа

В случае успеха, будет возвращена ссылка на сгенерированный PDF файл печати бланка. Все отправления из массива list будут распечатаны в одном PDF файле. Ссылка действительна 24 часа.

[out] msg Сообщение о выполнении действия в виде массива с ключами. 
  • 'type' - тип сообщения (error - ошибка, done - успешно).
  • 'text' - текстовое сообщение.
[out] link Ссылка на PDF файл.

PHP скрипт - пример, вызова метода print_f116

Будет доступен после регистрации.

Ссылка на сообщение
Поделиться на другие сайты

Александр как вписать паспортные данные ? 

API. Метод print_f116. Печать сопроводительного бланка ф.116

Доступ с аутентификацией по API ключу + API паролю. Все аргументы запроса обязательны.

Аргументы запроса

[in] apikey API ключ Вашего аккаунта.
[in] method print_f116
[in] f116_onepage Значение 1 или 0. Если 1, то форма 116 печатается на 1 листе А4, иначе на двух листах А5
[in] print0 Значение 1 или 0. Если 1, то нулевая объявленная ценность и наложенный платеж печатается как 0 руб., иначе остается пустое место
[in] list Массив данных о почтовых отправлениях закодированный JSON. Данные параметры печатаются без проверки. Что введено, то будет напечатано. Указывайте телефонный номер для отправления уведомлений по СМС, по факту прихода отправления в почтовое отделение (в разработке)
  • 'from_country' - страна места отправления
  • 'from_index' - почтовый индекс места отправления
  • 'from_state' - область/регион
  • 'from_city' - город/населенный пункт
  • 'from_addr' - обратный адрес отправителя (улица, дом, квартира/офис)
  • 'from_fio' - ФИО или наименование организации отправителя
  • 'p_seriya' - серия паспорта
  • 'p_nomer' - номер паспорта
  • 'p_vidan' - дата выдачи (формат: ДД.ММ.ГГГГ)
  • 'p_vidal' - наименования учреждения выдавшего паспорт
  • 'to_country' - страна места получения
  • 'to_index' - почтовый индекс получателя
  • 'to_state' - область/регион
  • 'to_city' - город/населенный пункт
  • 'to_addr' - адрес получателя (улица, дом, квартира/офис)
  • 'to_fio' - ФИО или наименование организации получателя
  • 'to_tel' - телефонный номер получателя (формат: +7XXXXXXXXXX, 8XXXXXXXXXX, 7XXXXXXXXXX)
  • 'order_id' - номер заказа (в Вашей системе учета)
  • 'ob_cennost_rub' - сумма объявленной ценности
  • 'nalogka_rub' - сумма наложенного платежа
[in] hash Обязательный аргумент

Аргументы ответа

В случае успеха, будет возвращена ссылка на сгенерированный PDF файл печати бланка. Все отправления из массива list будут распечатаны в одном PDF файле. Ссылка действительна 24 часа.

[out] msg Сообщение о выполнении действия в виде массива с ключами. 
  • 'type' - тип сообщения (error - ошибка, done - успешно).
  • 'text' - текстовое сообщение.
[out] link Ссылка на PDF файл.

PHP скрипт - пример, вызова метода print_f116

Будет доступен после регистрации.

Добавил.

Вот исправленный файл /app/View/Helpers/PrintFormsHelper.php

PrintFormsHelper.php

Изменено пользователем VaM
Ссылка на сообщение
Поделиться на другие сайты

Не за что.

Вроде ведь не было раньше паспорта у russianpostcalc.ru, во всяком случае когда модуль делал.

Ссылка на сообщение
Поделиться на другие сайты

нет было я помню обращал внимание но вы не в писали в модуль. Спасибо большое все работает

Ссылка на сообщение
Поделиться на другие сайты

Понятно, может проспустил этот момент.

PrintFormsHelper.php

Изменено пользователем VaM
Ссылка на сообщение
Поделиться на другие сайты
  • 4 weeks later...

На сайте RussianPostCalc есть рассвет обычной посылки и посылки 1 класса. Есть ли возможность реализовать эту функцию в VamShop?

Ссылка на сообщение
Поделиться на другие сайты

На сайте RussianPostCalc есть рассвет обычной посылки и посылки 1 класса. Есть ли возможность реализовать эту функцию в VamShop?

В /app/Plugin/Shipping/Controller/RussianPostCalcController.php поменяйте:

		return $ret['calc'][0]['cost'];

на:

		return $ret['calc'][1]['cost'];

 

или наоборот, 1 на 0

Ссылка на сообщение
Поделиться на другие сайты

А можно как то сделать второй способ доставки RussianPostCalc, чтобы было в магазине оба: обычная посылка и посылка 1 класса?

Ссылка на сообщение
Поделиться на другие сайты

Можно, делайте клон модуля, в одному пишите return $ret['calc'][0]['cost'];

в другом return $ret['calc'][1]['cost'];

Ссылка на сообщение
Поделиться на другие сайты

Делать копию файлов в /app/Plugin/Shipping/

В папках Controller и View

например копируя RussianPostCalc в RussianPostCalca

и внутри файла меняя RussianPostCalc на RussianPostCalca

Ссылка на сообщение
Поделиться на другие сайты

Пишет ошибку: 

Not Found

Error: The requested address '/shipping/RussianPostCalca/install/' was not found on this server.

 
Ссылка на сообщение
Поделиться на другие сайты

Значит не создали файл RussianPostCalcaController.php файл, либо внутри файла не исправили код названия класса на RussianPostCalca

Ссылка на сообщение
Поделиться на другие сайты
  • 2 weeks later...
Алексей Павлов

В /app/Plugin/Shipping/Controller/RussianPostCalcController.php поменяйте:

		return $ret['calc'][0]['cost'];

на:

		return $ret['calc'][1]['cost'];

 

или наоборот, 1 на 0

Установил себе файл, который вы выкладывали выше и не нашел такую строчку.

Нашел     if (isset($ret['calc']) && $ret['calc'][1]['cost'] > 0) {
      $shipping_cost = $ret['calc'][1]['cost'];   

Поменял нули на единицы, и теперь у меня разница в обычной отправке и отправке 1 классом всего 2 рубля, хотя на их сайте считает по-другому. Подскажите что не так делаю?

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...