У нас установлен модуль Sberbank. К действию "Приход платежа" привязан дин.код.
Проблема в том, что в этом скрипте не определяется
customerEmail, он равен null.
Email вводится на стороне Сбербанка вместе с реквизитами банковской карты.
Как узнать этот email?
Код:
sberbank: вер. 6.2.64 / 10.08.2017 16:38:29
Код:
package ru.bitel.bgbilling.cashcheck;
import static ru.bitel.bgbilling.common.bean.BGBaseConstants.KEY_CUSTOMER_ADDRESS;
import java.sql.Connection;
import bitel.billing.server.util.MailMsg;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract;
import ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao;
import ru.bitel.bgbilling.kernel.contract.balance.common.bean.Payment;
import ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent;
import ru.bitel.bgbilling.kernel.contract.config.server.ContractModuleConfigDao;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils;
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.Check;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.contract.bean.ContractParameterManager;
/**
* Обрабатываем приход платежа с печатью на регистраторах по событию «Приход платежа».
* Попытка костыля для обработки онлайн-платежей.
* @author dimon
*/
public class CheckInternet
extends EventScriptBase<PaymentEvent>
{
/**
* [Настройки здесь]
* Номер ККМ из конфига плагина, на котором печатать.
*/
private int kkmNum = 1;
/**
* [Настройки здесь]
* Пароль, под которым заходит в ККМ.
*/
private int kkmPass = 30;
/**
* [Настройки здесь]
* e-mail администраторов, куда слать уведомления.
*/
private String[] EMAILS = {"xxxxx@xxxxxx.ru"};
/**
* [Настройки здесь]
* На основании переданных данных (payment, contract) генерируется объект Check.
* Там же внутри в объект Check ставятся тип платежей для ККМ (check.setPaymentType) и налоговая группа для ККМ (check.setTax).
*/
private void makeCheck(Connection con, Payment payment, Contract contract) throws Exception
{
int PARAM_ID = 1;
//сбербанк
if(payment.getTypeId() == 19) // остальные ветки по аналогии
{
print("печать чека для Сбербанка");
int MID = 23;
ContractModuleConfigDao contractModuleConfigDao = new ContractModuleConfigDao( con, MID );
String customerEmail = contractModuleConfigDao.get( contract.getId(), KEY_CUSTOMER_ADDRESS );
contractModuleConfigDao.close();
print(customerEmail);
check = new Check();
check.setPaymentType(4); // ставим ТИП ПЛАТЕЖА ККМ: 1 - нал, 2,3,4 - безнал или какой-то другой тип оплаты
check.setTax(3); //НДС=0 ставим ТИП НАЛОГА ККМ: 0 - по номеру секции (в атолах), N - какой-то другой на выбор
check.setOnlyElCheck(true); // "только электронный чек"
check.setCustomerEmail(customerEmail);
int paymentDep = 1; // отдел, используется ниже в addPayment
// добавляем ФИО
ContractParameterManager bgParamMan = new ContractParameterManager( con );
String paramVal = bgParamMan.getStringParam( contract.getId(), PARAM_ID );
paramVal = paramVal.substring(0,20);
print("от: "+paramVal);
print( "id: " + contract.getTitle() +" ["+contract.getComment()+"]" );
check.addString("от: "+paramVal);
check.addString( "id: " + contract.getTitle() +" ["+contract.getComment()+"]" );
check.addPayment( payment.getSum(), "Интернет" , paymentDep );
}
}
// --- всё что ниже менять не нужно ---
private Check check = null;
@Override
public void onEvent(PaymentEvent event, Setup setup, ConnectionSet set)
throws Exception
{
if(event.isEditMode()) return; // если платёж редактируется, а не создаётся, то сразу уходим
Connection con = set.getConnection();
Payment payment = event.getPayment();
int userId = payment.getUserId();
check = null;
print( "CashCheck Autoprint: user id="+userId+", печать чека " );
ContractDao contractDao = new ContractDao(con, userId);
Contract contract = contractDao.get(payment.getContractId());
contractDao.close();
makeCheck( con, payment, contract ); // в этом методе делается всё про чек - устанавливаются глобальные check и kkmNum
if( check != null )
{
try
{
CashCheckUtils.printCheck(check, CashCheckUtils.getPrinter( kkmNum ), kkmPass, con, payment.getId());
print( "CashCheck Autoprint: check was printed!" );
}
catch(BGException e)
{
print( "CashCheck Autoprint: check ERROR: " + e.getMessage() );
sendMails(setup, "CashCheck Autoprint: check ERROR", e.printStackTraceToString());
}
}
else
{
error( "CashCheck Autoprint: makeCheck: check == null, payment NOT printed!" );
}
}
private void sendMails(Setup setup, String subject, String body)
{
MailMsg mailmsg = new MailMsg(setup);
for(String email : EMAILS)
{
try
{
print("CashCheck Autoprint: Send e-mail to "+email+"...");
mailmsg.sendMessage(email, subject, body);
}
catch (Exception e)
{
error("CashCheck Autoprint: Error send e-mail: "+e.toString());
}
}
}
}
_________________
Код:
Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171