Отправка чека на email

Печать кассовых и бумажных чеков по занесению платежа в биллинг.

Отправка чека на email

Сообщение simka » 12 янв 2018, 14:57

У нас установлен модуль Sberbank. К действию "Приход платежа" привязан дин.код.
Проблема в том, что в этом скрипте не определяется customerEmail, он равен null.
Email вводится на стороне Сбербанка вместе с реквизитами банковской карты.
Как узнать этот email?

$this->bbcode_second_pass_code('', ' sberbank: вер. 6.2.64 / 10.08.2017 16:38:29')

$this->bbcode_second_pass_code('', '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());
}
}
}
}
')
$this->bbcode_second_pass_code('', ' Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171')
simka
 
Сообщения: 17
Зарегистрирован: 23 дек 2015, 18:07

Re: Отправка чека на email

Сообщение dimOn » 12 янв 2018, 19:21

а в биллинг этот емайл вообще приходит в каком-то виде? в логах, каментах или где-то отображается?
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение dimOn » 12 янв 2018, 19:22

в модуле сбербанк в ЛК разве нет поля для ввода мыла/телефона для отправки электронного чека?
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение simka » 15 янв 2018, 11:58

$this->bbcode_second_pass_code('', 'desc sberbank_transaction_23
id
contract_id
payment_id
create_date
transaction_date
order_id
autopayment
status
params
sum
')
в поле params содержатся след.данные
$this->bbcode_second_pass_code('', 'orderId=598ff78a-1ed7-7e43-598f-f78a0014d614
depositAmount=1000
approvalCode=424711
authCode=2
Amount=1000
Ip=ХХ.ХХ.ХХ.ХХ
OrderNumber=3
OrderStatus=2
cardholderName=CARDHOLDER NAME
expiration=202002
currency=643
ErrorCode=0
ErrorMessage=Успешно
Pan=XXXXXX**XXXX
')
sberbank1.png
Скрин из ЛК

sberbank2.png
Скрин из ЛК

sberbank3.png
страница Сбербанка
$this->bbcode_second_pass_code('', ' Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171')
simka
 
Сообщения: 17
Зарегистрирован: 23 дек 2015, 18:07

Re: Отправка чека на email

Сообщение dimOn » 15 янв 2018, 12:15

Ну то есть мыла там не приходит.
А зачем сбербанк пишет, что вышлет чек, если вы не через него печатать чеки хотите, а на своей стороне?
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение dimOn » 15 янв 2018, 12:17

вот же в настройках модуля есть

sberbank.fiscalization.customer.address.enable Включение запроса поля customerAddress при оплате
sberbank.fiscalization.customer.address.title Текст поля customerAddress в ЛК, по умолчанию "Укажите E-mail или номер сотового для отправки чека".
sberbank.fiscalization.customer.address.required Требование заполнения поля customerAddress при оплате

После этого можно в скрипте получить через ContractModuleConfigDao, как в примерах на вики написано
http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%B5%D0%B9
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение simka » 15 янв 2018, 12:44

$this->bbcode_second_pass_code('', 'вот же в настройках модуля есть')
Это где же? Ни в документации, ни в шаблоне конфигурации модуля Сбербанк нет.
При установке этих параметров в ЛК не появляется поле для ввода email.
$this->bbcode_second_pass_code('', '#Включение запроса поля customerAddress при оплате
sberbank.fiscalization.customer.address.enable=true
#Текст поля customerAddress в ЛК, по умолчанию "Укажите E-mail или номер сотового для отправки чека".
sberbank.fiscalization.customer.address.title=Укажите E-mail для отправки чека
#Требование заполнения поля customerAddress при оплате
sberbank.fiscalization.customer.address.required=true')
Подскажите, что не так?
$this->bbcode_second_pass_code('', ' Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171')
simka
 
Сообщения: 17
Зарегистрирован: 23 дек 2015, 18:07

Re: Отправка чека на email

Сообщение dimOn » 15 янв 2018, 17:01

извините, ввёл в заблуждение, в 6.2 этого действительно нет
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение simka » 15 янв 2018, 17:10

Так все-таки как нам быть? Как узнать email, чтобы отправлять чеки через свою кассу?
$this->bbcode_second_pass_code('', ' Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171')
simka
 
Сообщения: 17
Зарегистрирован: 23 дек 2015, 18:07

Re: Отправка чека на email

Сообщение dimOn » 15 янв 2018, 17:33

Ну видимо никак не узнать в текущей реализации.
Нужно дождаться разработчика модуля, возможно можно накатить это в 6.2 или может туда приходит всё же мыло в каком-то виде.
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Отправка чека на email

Сообщение simka » 15 янв 2018, 18:40

А когда появиться разработчик модуля?
$this->bbcode_second_pass_code('', ' Сервер: вер. 6.2.1213 / 04.05.2018 12:58:54
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_171')
simka
 
Сообщения: 17
Зарегистрирован: 23 дек 2015, 18:07


Вернуться в Плагин CashCheck

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1