forum.bitel.ru
http://forum.bitel.ru/

Прием платежей через сайт
http://forum.bitel.ru/viewtopic.php?f=28&t=12593
Страница 1 из 1

Автор:  borin [ 24 авг 2017, 18:12 ]
Заголовок сообщения:  Прием платежей через сайт

Добрый день!

Есть желание прикрутить прием платежей через сайт. В качестве оператора оператора по приему платежей выбран сбербанк.
Видел есть готовый модуль Sberbank, но это не совсем то, что нужно, так как хотелось бы принимать платежи именно через сайт, а не личный кабинет.
Сбербанк предоставил API, там все просто принимаем платеж, после того как абонент оплатил, Сбербанк редиректит его обратно на сайт, тут мы проверяем состояние платежа, если все хорошо, то остается внести в BGBilling. Наработки для внесения платежей через web-сервисы у меня уже имеются, и вроде на этом можно было бы поставить точку. Но пользователю нужен чек => его нужно провести через ККТ, но не печатать чек, а отправить его на email, если он был указан при оплате.

Отсюда вопрос, если возможность отправлять платеж на ККТ так же через web-cервисы?

PS. т.е. можно не покупать дополнительную кассу, а заносить в уже существующую )

Автор:  dimOn [ 24 авг 2017, 21:30 ]
Заголовок сообщения:  Re: Прием платежей через сайт

ну событие на приход платежа и оттуда печатать чек? вы про это?

Автор:  borin [ 24 авг 2017, 23:10 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
ну событие на приход платежа и оттуда печатать чек? вы про это?

Ну в целом да, единственно событие прихода платежа будет через web-сервисы (ru.bitel.bgbilling.kernel.contract.balance/PaymentService) и чек надо не печатать, а отправить на e-mail, который укажет абонент на сайте. Чек на email cashcheck умеет, единственно его надо передать при добавлении платежа.

Автор:  skn [ 25 авг 2017, 01:31 ]
Заголовок сообщения:  Re: Прием платежей через сайт

Чек клиенту должен отсылать "оператор фискальных данных", а не вы.

Автор:  zavndw [ 25 авг 2017, 06:01 ]
Заголовок сообщения:  Re: Прием платежей через сайт

Уточните у Сбера, мы через лк принимаем по эквайринку и они сами как то отправляют.

Автор:  borin [ 25 авг 2017, 10:15 ]
Заголовок сообщения:  Re: Прием платежей через сайт

skn писал(а):
Чек клиенту должен отсылать "оператор фискальных данных", а не вы.

Все верно, платеж надо отправить на ККТ и передать email, ОФД сама отправит чек.

zavndw писал(а):
Уточните у Сбера, мы через лк принимаем по эквайринку и они сами как то отправляют.

Сбер нам предложил дополнительный облачный эквайринг, 3к руб. в месяц, только к чему это если у нас уже есть касса и достаточно отправлять платеж туда ))) А билинг умеет работать с ККТ, т.е. достаточно чтобы при добавлении платежа через web-сервисы, отработало событие отправки платежа в ККТ.

Автор:  dimOn [ 25 авг 2017, 12:06 ]
Заголовок сообщения:  Re: Прием платежей через сайт

ну это как примерно такой костыль?
http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%B5%D0%B9
просто непонятно вы это видели или речь про другое что-то?

Автор:  borin [ 25 авг 2017, 12:22 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
ну это как примерно такой костыль?
http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%B5%D0%B9
просто непонятно вы это видели или речь про другое что-то?

Извиняюсь, нет, не видел, мой косяк :) Нооо, бегло посмотрев, думаю этот костыль думаю нам подойдет, придется немного допилить, там мыло берется из карточки договора, в моем случае надо использовать мыло, которое укажет пользователь на сайте сбербанка, нооо это тоже не проблема.

PS. Спасибо :D

Автор:  dimOn [ 25 авг 2017, 12:52 ]
Заголовок сообщения:  Re: Прием платежей через сайт

там в примере берётся не из карточки договора, а то мыло, которое юзер вводит в ЛК перед оплатой и уходом на сторонний сайт платёжной системы
но берут и из параметров и откуда хотите

Автор:  borin [ 29 сен 2017, 10:38 ]
Заголовок сообщения:  Re: Прием платежей через сайт

Добрый день!

Добрались до реализации приема платежей, все работает за исключением снятия Z-отчета.
Код:
package ru.borin.bgbilling.script;

import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.plugins.cashcheck.common.CashcheckService;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.borin.bgbilling.common.MailMsgExt;

import java.io.PrintWriter;
import java.io.StringWriter;


/** ОТЧЕТ С ГАШЕНИЕМ **/
public class CashcheckZReport extends GlobalScriptBase {
    @Override
    public void execute(Setup setup, ConnectionSet connectionSet) throws Exception {
        int kkmNum = 2;
        String kkmPass = "30";

        MailMsgExt mailMsgExt = new MailMsgExt(setup);

        print( "Cashcheck ZReport..." );
        try {
//            ServerContext context = new ServerContext(setup, connectionSet, 0, 1);
            ServerContext context = ServerContext.get();

            CashcheckService cashcheckService = context.getService(CashcheckService.class, 0);
            cashcheckService.bindPrinter(kkmNum, kkmPass);
            cashcheckService.ZReport();

            print( "Cashcheck ZReport OK!" );
            mailMsgExt.sendAlarm("Cashcheck ZReport OK", "Cashcheck ZReport was made! OK!");
        } catch(BGException e) {
            print( "Cashcheck ZReport ERROR: " + e.getMessage() );

            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            mailMsgExt.sendAlarm("Cashcheck ZReport ERROR", e.toString() + "\n" + sw.toString());
        }
    }
}


Если снимать ZReport вручную, получаю ошибку, но смена закрывается и чек о закрытии смены выходит. XReport проходит без ошибок.
Код:
ru.bitel.bgbilling.common.BGMessageException: Ошибка! ККМ сказала: Снятие отчета прервалось
ru.bitel.bgbilling.common.BGMessageException: Ошибка! ККМ сказала: Снятие отчета прервалось
        at ru.bitel.bgbilling.plugins.cashcheck.server.CashcheckServiceImpl.ZReport(CashcheckServiceImpl.java:1218)
        at ru.borin.bgbilling.script.CashcheckZReport.execute(CashcheckZReport.java:32)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at ru.bitel.bgbilling.kernel.dynamic.server.DynamicCodeServiceImpl.run(DynamicCodeServiceImpl.java:330)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)


Если запускать скрипт через планировщик, то:
Код:
ID события: bgbs.global.script.error
Время регистрации события: 29.09.2017 09:24:02
GENERATE_TIME: 29.09.17 09:24:02
EXECUTION_STOP_TIME: 29.09.17 09:24:02
PROCESS_TIME: 5

OUT:
Cashcheck ZReport...

EXCEPTIONS:
java.lang.IllegalStateException: not userID
        at ru.bitel.bgbilling.plugins.cashcheck.server.bean.UserCache.getUserMap(UserCache.java:40)
        at ru.bitel.bgbilling.plugins.cashcheck.server.bean.UserCache.removeAttribute(UserCache.java:70)
        at ru.bitel.bgbilling.plugins.cashcheck.server.bean.PrinterManager.setCurrentRegistrator(PrinterManager.java:183)
        at ru.bitel.bgbilling.plugins.cashcheck.server.CashcheckServiceImpl.bindPrinter(CashcheckServiceImpl.java:140)
        at ru.borin.bgbilling.script.CashcheckZReport.execute(CashcheckZReport.java:32)
        at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38)
        at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83)
        at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:109)
        at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:61)
        at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:80)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

Автор:  dimOn [ 29 сен 2017, 12:09 ]
Заголовок сообщения:  Re: Прием платежей через сайт

по ссылке на вики совсем другой код, вы зачем всё это делаете через веб-сервисы итд? это про userID
а про Снятие отчета прервалось - это известная проблема, на которую АТОЛ не отвечает (пару раз обращались), можете им написать : https://forum.bitel.ru/viewtopic.php?f=28&t=12550

Автор:  borin [ 29 сен 2017, 12:50 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
по ссылке на вики совсем другой код, вы зачем всё это делаете через веб-сервисы итд? это про userID

Ooops, видимо в IDE у меня старые либы были, и IDE сказала что, такого метода нет, поэтому сделал через сервисы. А в JavaDoc смотрел, там тоже тишина.
dimOn писал(а):
а про Снятие отчета прервалось - это известная проблема, на которую АТОЛ не отвечает (пару раз обращались), можете им написать : https://forum.bitel.ru/viewtopic.php?f=28&t=12550

АТОЛ в плане общения с розничными покупателями касс, вообще мутная контора. Получается, остается только отлавливать эксепшен и игнорировать его? Может, на уровне BGCashServer, что то порешать, добавить неофициальный параметр :)

Автор:  dimOn [ 29 сен 2017, 13:17 ]
Заголовок сообщения:  Re: Прием платежей через сайт

метод такой есть в 6.2 точно переносилис

по поводу z-отчёта - напишите в HD если есть возможность, нужно подумать и потестить (бесплатное обращение)

Автор:  borin [ 29 сен 2017, 16:31 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
по поводу z-отчёта - напишите в HD если есть возможность, нужно подумать и потестить (бесплатное обращение)

В личном кабинете, доступа к helpdesk пока нет, ждем-с )

Автор:  borin [ 09 окт 2017, 10:47 ]
Заголовок сообщения:  Re: Прием платежей через сайт

Добрый день!

Заметил, если запускать ZReport из планировщика он не снимается.
Из планировщика:
Код:
ID события: bgbs.global.script.error
Время регистрации события: 09.10.2017 06:00:01
Хост сервера: hostname not resolved: k-billing01: k-billing01: unknown error

GENERATE_TIME: 09.10.17 06:00:01
EXECUTION_STOP_TIME: 09.10.17 06:00:01
PROCESS_TIME: 68

OUT:
Cashcheck ZReport...


EXCEPTIONS:
java.lang.NullPointerException
        at ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils.ZReport(CashCheckUtils.java:73)
        at ru.borin.bgbilling.script.CashcheckZReport.execute(CashcheckZReport.java:27)
        at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38)
        at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83)
        at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:109)
        at ru.bitel.bgbilling.kernel.script.server.task.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:61)


Из дин.кода:
Код:
ru.bitel.bgbilling.common.BGException: Error! KKM says: Снятие отчета прервалось?
ru.bitel.bgbilling.common.BGException: Error! KKM says: Снятие отчета прервалось?
        at ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils.ZReport(CashCheckUtils.java:80)
        at ru.borin.bgbilling.script.CashcheckZReport.execute(CashcheckZReport.java:27)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


Почему NullPointerException?

Код:
package ru.borin.bgbilling.script;

import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.borin.bgbilling.common.MailMsgExt;

import java.io.PrintWriter;
import java.io.StringWriter;


/** ОТЧЕТ С ГАШЕНИЕМ **/
public class CashcheckZReport extends GlobalScriptBase {
    @Override
    public void execute(Setup setup, ConnectionSet connectionSet) throws Exception {
        int kkmNum = 2;
        int kkmPass = 30;

        MailMsgExt mailMsgExt = new MailMsgExt(setup);

        print( "Cashcheck ZReport..." );
        try {
            CashCheckUtils.ZReport(CashCheckUtils.getPrinter( kkmNum ), kkmPass);

            print( "Cashcheck ZReport OK!" );
            mailMsgExt.sendAlarm("Cashcheck ZReport OK", "Cashcheck ZReport was made! OK!");
        } catch(BGException e) {
            print( "Cashcheck ZReport ERROR: " + e.getMessage() );

            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            mailMsgExt.sendAlarm("Cashcheck ZReport ERROR", e.toString() + "\n" + sw.toString());
        }
    }
}

Автор:  dimOn [ 09 окт 2017, 11:08 ]
Заголовок сообщения:  Re: Прием платежей через сайт

т.е. та же проблема с NPE осталась для примера с вики?
(ну про Снятие отчета прервалось? это вопрос отдельный, обсуждался и в HD и в телеграме)

Автор:  borin [ 09 окт 2017, 11:27 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
т.е. та же проблема с NPE осталась для примера с вики?
(ну про Снятие отчета прервалось? это вопрос отдельный, обсуждался и в HD и в телеграме)


Не понял, что такое NPE? )))
Если снимать из дин кода, то вылетает эксепшен "Снятие отчета прервалось?" и отчет снимается, а если через планировщик, то NullPointer и отчет не снимается вообще, день не закрывается.

Автор:  borin [ 09 окт 2017, 11:29 ]
Заголовок сообщения:  Re: Прием платежей через сайт

С "Снятие отчета прервалось?", я уже смирился, сейчас бы, чтоб он из планировщика снимался )

Автор:  dimOn [ 09 окт 2017, 12:54 ]
Заголовок сообщения:  Re: Прием платежей через сайт

npe - это NullPointerException , ну ясно с этим

Автор:  dimOn [ 09 окт 2017, 13:09 ]
Заголовок сообщения:  Re: Прием платежей через сайт

другое же тут походу, судя по коду просто принтера нет вроде...
int kkmNum = 2; - это точно правильный? и в конфиге есть такой ккм настроенный?

Автор:  borin [ 09 окт 2017, 14:19 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
другое же тут походу, судя по коду просто принтера нет вроде...
int kkmNum = 2; - это точно правильный? и в конфиге есть такой ккм настроенный?


Конечно правильный, ведь этот же скрипт выполняется если запустить вручную, проблема только если из планировщика.
Код:
checkbuilder=ru.borin.cashcheck.CheckMakerKKT

fr.1.connector=192.168.10.56:9876
fr.1.title=АТОЛ-55Ф

fr.2.connector=192.168.10.58:9876
fr.2.title=АТОЛ-30Ф-INTERNET-PAYMENT

pt.3.fr=1
pt.4.fr=1

pt13.rf=2

disable.login.hello=0

Автор:  dimOn [ 10 окт 2017, 15:55 ]
Заголовок сообщения:  Re: Прием платежей через сайт

проверил на мастере - всё работает
переключил и проверил на 6.2 - вручную глоб скрипт всё работает
настроил полностью по планировщику и дождался чтобы сработало - всё работает

скрипты с вики писались для клиента, он проверял, проверьте всё ещё раз: перекомпилируйте код, проверьте настройки, перезагрузите шедулер итд
если глоб скрипт (не класс дин.кода!) открыть и нажать там внутри "показать результаты выполнения" и "выполнить" - что пишет? покажите скрин

Автор:  borin [ 10 окт 2017, 16:36 ]
Заголовок сообщения:  Re: Прием платежей через сайт

Если открыть глобальный скрипт, то тоже все работает. О точно может шедулер перезапустить, перезапущу и завтра о результатах отпишусь, задача на 6 утра назначена.
В том то и дело что работает и из глобального скрипта и дин кода, но из планировщика NPE, спасибо за совет с планировщиком, вдруг поможет.

Автор:  borin [ 11 окт 2017, 10:29 ]
Заголовок сообщения:  Re: Прием платежей через сайт

dimOn писал(а):
перезагрузите шедулер итд

Хааа, перезагрузка планировщика помогла :D

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/