UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: stud_mai от 20 Мая 2016, 15:05:22

Название: Интеграция с Tinkoff
Отправлено: stud_mai от 20 Мая 2016, 15:05:22
Добрый день!

Провожу интеграцию с эквайрингом от Tinkoff. Все вроде получается, но встал вопрос: хочу для отладки писать в файл данные, которыми обменивается umi с tinkoff. Все необходимые функции process(), poll() и validate() описаны в классе tinkoffPayment в файле, расположенном в classes\modules\emarket\classes\payment\systems\. Тамже я использую file_put_contents, чтобы записать необходимые данные в файл, но файл не создается. Почему не понимаю. Может кто-нибудь помочь в этом вопросе?
Название: Re: Интеграция с Tinkoff
Отправлено: aghigay от 20 Мая 2016, 15:18:32
Проверьте для начала может ли скрипт писать в тот файл, который вы ему указали. Для этого просто запустите скрипт из командной строки браузера. Заодно так вы проверите что ваш скрипт вообще создает какой-то файл.

Ну а если из командной строки все запускается - проверяйте что в банке указаны правильные настройки и что банк отправляет информацию на ваш сервер.
Название: Re: Интеграция с Tinkoff
Отправлено: stud_mai от 20 Мая 2016, 15:54:12
Может немного не так описал проблему... Но у меня не отдельный файл со скриптом. Для ясности приведу пример функции process():
public function process($template = null) {
$this->order->order();

objectProxyHelper::includeClass('emarket/classes/payment/api/', 'TinkoffMerchantAPI');
$tinkoff = new TinkoffMerchantAPI($this->getValue('terminal_key'),$this->getValue('password'),$this->getValue('url'));

$amount = $this->order->getActualPrice() * 100;
$orderId = $this->order->getValue('number');

$customerId = $this->order->getCustomerId();
$customer = umiObjectsCollection::getInstance()->getObject($customerId);
$email = $customer->getValue('e-mail');

if(!$email) {
$email = $customer->getValue('email');
}

$params = array('OrderId' => $orderId, 'Amount' => $amount, 'DATA' => 'Email='.$email);
        $tinkoff->init($params);

$param = array();
$param['link'] = $tinkoff->paymentUrl;

// Вот этот кусок...
$file = 'log.txt';
$info = 'Параметры: ';
$info .= $params['OrderId'];
$info .= PHP_EOL;
$info .= 'Ссылка: ';
$info .= $param['link'];
$info .= PHP_EOL;
file_put_contents($file, $info);
        // ...кода не работает

$this->order->setPaymentStatus('initialized');
list($templateString) = def_module::loadTemplates("emarket/payment/tinkoff/".$template);
return def_module::parseTemplate($templateString, $param);
}
Название: Re: Интеграция с Tinkoff
Отправлено: aghigay от 20 Мая 2016, 19:29:05
Пока не вижу что именно вас смутило.

Ваша функция описана в каком-то модуле. Например в модуле emarket

Если для неё указаны все разрешения на запуск, то её можно запустить через вызов: http://site.ru/udata/emarket/process

В этот момент на экране вы увидите результат её работы, а в файловой системе образуется файл. Если конечно до этого процесс дойдет.

Добавлено:
---------
Если речь идет о том, что эта функция срабатывает при обращении правильным образом к какому-то модулю с указанием номера заказа, то вы так же из браузера можете эмулировать это обращение и так же получить результат.
Название: Re: Интеграция с Tinkoff
Отправлено: stud_mai от 20 Мая 2016, 19:49:32
Смущало то, что файл не создавался. Решил проблему, дописав путь к корню:
$file =  getServer('DOCUMENT_ROOT') . '/log.txt';
Еще как оказалось почему-то в Total Commander не сразу появлялся созданный файл. Только при сбросе и вновь восстановленном соединении с ftp файл отображался. Так что может быть и первоначальный код работал исправно...
Название: Re: Интеграция с Tinkoff
Отправлено: e.ioffe от 21 Мая 2016, 19:45:12
Смущало то, что файл не создавался. Решил проблему, дописав путь к корню:
$file =  getServer('DOCUMENT_ROOT') . '/log.txt';
Еще как оказалось почему-то в Total Commander не сразу появлялся созданный файл. Только при сбросе и вновь восстановленном соединении с ftp файл отображался. Так что может быть и первоначальный код работал исправно...

На будущее - лучше вместо getServer('DOCUMENT_ROOT') использовать CURRENT_WORKING_DIR