Автор Тема: Как изменить статус заказа (через URL) и установить личный шаблон e-mail?  (Прочитано 1679 раз)

14 Апрель 2015, 14:48:15
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Привет Всем!

Создал свой метод оплаты скопируя Bankwire/Bank Cheque module. Во время заказа идет редирект на другом сайт.
Мне нужен менять статус ордера после возвращение на сайт (Кажется этот процесс идет по WebService).
Еще надо как-то создать свой статус как PS_OS_CHEQUE.

Прошу Ваша помошь.
14 Апрель 2015, 15:03:01
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1807
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В модуле определяете статус заказа в зависимоти от ответа сайта оплаты.
Например, если ОК, то статус MY_STATUS_ORDER или PS_OS_CHEQUE или ...
Свой статус можно создать программно или в ручную в заказы -> статусы.
14 Апрель 2015, 20:47:54
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В модуле определяете статус заказа в зависимоти от ответа сайта оплаты.
Например, если ОК, то статус MY_STATUS_ORDER или PS_OS_CHEQUE или ...
Свой статус можно создать программно или в ручную в заказы -> статусы.

Можно поподробнее в примерах?
14 Апрель 2015, 21:29:09
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Пример нужно брать у платежного сервиса, для которого пишите модуль. Что вроде такого:
$pay_sign = md5("$sum:$id_cart:$pay_password");
if($_REQUEST['SignatureValue']) == $pay_sign)) {
    // success
    // return "OK";
}
18 Апрель 2015, 19:36:38
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пример нужно брать у платежного сервиса, для которого пишите модуль. Что вроде такого:
$pay_sign = md5("$sum:$id_cart:$pay_password");
if($_REQUEST['SignatureValue']) == $pay_sign)) {
    // success
    // return "OK";
}

Ya uje napisal svoy script cerez cURL, i ponimayu alqoritm cto nujno, no mne nujen sposob kak vse eto sdelat, to est mojno, kak?. obyasnite pojaluysta.
19 Апрель 2015, 11:13:23
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Если свой алгоритм, то как объяснять что нужно там делать?
В обычном варинате, есть ключ, ключ шифруется, с сайта оплаты возвращается ответ, сравнивается и по результату заказа или сохраняется, или отклоняется.
Но все хавист от сайта оплаты, то что он возвращает при успехе или ошибки оплаты.
20 Апрель 2015, 10:07:29
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если свой алгоритм, то как объяснять что нужно там делать?
В обычном варинате, есть ключ, ключ шифруется, с сайта оплаты возвращается ответ, сравнивается и по результату заказа или сохраняется, или отклоняется.
Но все хавист от сайта оплаты, то что он возвращает при успехе или ошибки оплаты.

Давайте сделаем так - Вы можете мне сказать Этапы оплаты BankWire, то есть в каком файле что происходить )
20 Апрель 2015, 10:47:55
Ответ #7
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Вы читали - Creating a payment module ?
Цитировать
Validating the payment
In order to register the payment validation, you must use the validateOrder() method from the PaymentModule class, using the following parameters:
(integer) id_cart: the ID of the cart to validate.
(integer) id_order_state: the ID of the order status (Awiting payment, Payment accepted, Payment error, etc.).
(float) amount_paid: the amount that the client actually paid.
(string) payment_method: the name of the payment method.
Файлы могут быть разные. Можете все делать в классе модуля. Главное чтобы создать заказ нужно использовать validateOrder и парамметры, что написаны в справке.

В модуле оплаты BankWire для этого используется конроллер - /modules/bankwire/controllers/front/validation.php
Для указания контроллера в шаблоне используется метод
/*
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = null, $id_lang = null, $id_shop = null)
*/
{$link->getModuleLink('mymodule', 'mycontroller')}
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Апрель 2015, 10:56:24
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы читали - Creating a payment module ?
Цитировать
Validating the payment
In order to register the payment validation, you must use the validateOrder() method from the PaymentModule class, using the following parameters:
(integer) id_cart: the ID of the cart to validate.
(integer) id_order_state: the ID of the order status (Awiting payment, Payment accepted, Payment error, etc.).
(float) amount_paid: the amount that the client actually paid.
(string) payment_method: the name of the payment method.
Файлы могут быть разные. Можете все делать в классе модуля. Главное чтобы создать заказ нужно использовать validateOrder и парамметры, что написаны в справке.

В модуле оплаты BankWire для этого используется конроллер - /modules/bankwire/controllers/front/validation.php
Для указания контроллера в шаблоне используется метод
/*
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = null, $id_lang = null, $id_shop = null)
*/
{$link->getModuleLink('mymodule', 'mycontroller')}

ya vse eto prochital, s Validate u mena vse ok. a seycas vishlo sleduyushaya problema. ya ispolzovayu cURL v validate.php. no on ne xochet rabotat, i ne viydet ne odnoy oshibki.
20 Апрель 2015, 11:09:00
Ответ #9
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Может ваш хостинг не подерживает работу с cURL?
Проверку в модуле делали?
/* The cURL PHP extension must be enabled to use this module */
if (!function_exists('curl_version'))
{
        $this->_errors[] = $this->l('Sorry, this module requires the cURL PHP Extension (http://www.php.net/curl), which is not enabled on your server. Please ask your hosting provider for assistance.');
        return false;
}
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Апрель 2015, 11:17:00
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Может ваш хостинг не подерживает работу с cURL?
Проверку в модуле делали?
/* The cURL PHP extension must be enabled to use this module */
if (!function_exists('curl_version'))
{
        $this->_errors[] = $this->l('Sorry, this module requires the cURL PHP Extension (http://www.php.net/curl), which is not enabled on your server. Please ask your hosting provider for assistance.');
        return false;
}

ne s serverom vse v poryadke. ya v otdelnom fayle proboval, rabotaet kak nado. a v kontrollere ne otvetchaet
20 Апрель 2015, 11:20:04
Ответ #11
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
class MyModuleValidationModuleFrontController extends ModuleFrontController
{
        // здесь код
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Апрель 2015, 13:20:09
Ответ #12
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
class MyModuleValidationModuleFrontController extends ModuleFrontController
{
        // здесь код

ya uje viysanil problemu, a teper mne nujen postavit svoy status na valideorder: Configuration::get('PS_OS_MYOWN'). kak mojno delat?
20 Апрель 2015, 14:47:32
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Можно добавить новый статус заказа в ручную в админке, а можно в модуле:
public function install()
{
// create new order status STATUSNAME
$mystatus = array(
'invoice' => 1,
'send_email' => 1,
'module_name' => $this->name,
'color' => 'RoyalBlue',
'unremovable' => 0,
'hidden' => 0,
'logable' => 1,
'delivery' => 0,
'shipped' => 0,
'paid' => 1,
'deleted' => 0
);

if(!Db::getInstance()->autoExecute(_DB_PREFIX_.'order_state', $mystatus, 'INSERT'))
return false;
$id_order_state = (int)Db::getInstance()->Insert_ID();
$languages = Language::getLanguages(false);
foreach ($languages as $language)
Db::getInstance()->autoExecute(_DB_PREFIX_.'order_state_lang', array('id_order_state'=>$id_order_state, 'id_lang'=>$language['id_lang'], 'name'=>'Status name', 'template'=>''), 'INSERT');
   
if (!@copy(dirname(__FILE__).DIRECTORY_SEPARATOR.'img'.DIRECTORY_SEPARATOR.'logo.gif', _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.'img'.DIRECTORY_SEPARATOR.'os'.DIRECTORY_SEPARATOR.$id_order_state.'.gif'))
return false;
   
Configuration::updateValue('PS_OS_STATUSNAME', $id_order_state);
22 Апрель 2015, 14:52:00
Ответ #14
  • Фрилансер
  • *
  • Сообщений: 118
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Можно добавить новый статус заказа в ручную в админке, а можно в модуле:
public function install()
{
// create new order status STATUSNAME
$mystatus = array(
'invoice' => 1,
'send_email' => 1,
'module_name' => $this->name,
'color' => 'RoyalBlue',
'unremovable' => 0,
'hidden' => 0,
'logable' => 1,
'delivery' => 0,
'shipped' => 0,
'paid' => 1,
'deleted' => 0
);

if(!Db::getInstance()->autoExecute(_DB_PREFIX_.'order_state', $mystatus, 'INSERT'))
return false;
$id_order_state = (int)Db::getInstance()->Insert_ID();
$languages = Language::getLanguages(false);
foreach ($languages as $language)
Db::getInstance()->autoExecute(_DB_PREFIX_.'order_state_lang', array('id_order_state'=>$id_order_state, 'id_lang'=>$language['id_lang'], 'name'=>'Status name', 'template'=>''), 'INSERT');
   
if (!@copy(dirname(__FILE__).DIRECTORY_SEPARATOR.'img'.DIRECTORY_SEPARATOR.'logo.gif', _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.'img'.DIRECTORY_SEPARATOR.'os'.DIRECTORY_SEPARATOR.$id_order_state.'.gif'))
return false;
   
Configuration::updateValue('PS_OS_STATUSNAME', $id_order_state);

a kak budet esli nujno dpoobavit neskolko statusov?