forum.bitel.ru http://forum.bitel.ru/ |
|
Реализация интерфейса Sender http://forum.bitel.ru/viewtopic.php?f=54&t=12979 |
Страница 1 из 1 |
Автор: | Dipress [ 25 июл 2018, 13:16 ] |
Заголовок сообщения: | Реализация интерфейса Sender |
Добрый день. В документации к плагину Dispatch указано, что существует возможность реализации пользовательских способов отправки. Собственно пробую реализовать свой динамический класс: Код: package crmifc; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.plugin.server.BGPluginManagerServer; import ru.bitel.bgbilling.plugins.dispatch.common.bean.Contact; import ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender; import ru.bitel.common.Preferences; import javax.activation.DataSource; import java.util.List; import java.net.URLEncoder; import java.net.HttpURLConnection; import java.net.URL; public class EvastokSender implements Sender { private Preferences pluginPreferences = BGPluginManagerServer.getManager().getPlugin("ru.bitel.bgbilling.plugins.dispatch").getSetup(); @Override public void send(Contact contact, java.lang.String title, java.lang.String messageBody, java.util.List<javax.activation.DataSource> files) throws ru.bitel.bgbilling.common.BGException { String query = null; String url = "http://sms.e-vostok.ru/smsout.php?"; String login = "login"; String password = "password"; try { query = url + "login=" + login + "&password=" + password + "&service=21824&space_force=1&space=" + title + "&subno=" + URLEncoder.encode("+" + contact.getValue(), "UTF-8") + "&text=" + URLEncoder.encode(messageBody, "UTF-8"); } catch(java.io.UnsupportedEncodingException e) { System.out.println("Fail to create url string"); } HttpURLConnection connection = null; try { // Create connection connection = (HttpURLConnection) new URL(query).openConnection(); // Setup connection connection.setRequestMethod("GET"); connection.setUseCaches(false); connection.setConnectTimeout(2500); connection.setReadTimeout(2500); // Get request connection.connect(); } catch(Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } } } Так как в java не силен, может кто поможет подскажет как это все отдебажить, хотелось бы увидеть как формируется query и приходит ли вообще contact.getValue(). Опять таки, не профессионал, мог что-то упустить в коде. Если подскажите буду очень признателен. |
Автор: | Dipress [ 27 июл 2018, 15:10 ] |
Заголовок сообщения: | Re: Реализация интерфейса Sender |
Есть живые ? Вообщем, в логах шедулера приходить вот такая ошибка: Caused by: ru.bitel.bgbilling.common.BGException: Сбой при отправке смс: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target Что делать ? |
Автор: | Dipress [ 27 июл 2018, 19:20 ] |
Заголовок сообщения: | Re: Реализация интерфейса Sender |
Вообщем посмотрел как сделали разработчики и попробывал сделать под свои нужды. 1. Сделал свой класс Код: package crmifc.sms; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLEncoder; public class SmsEvostok { String login; String password; String api_url; SmsEvostok() {}; public SmsEvostok(String login, String password, String api_url) { this.login = login; this.password = password; this.api_url = api_url; } public String sendMsg(String phone, String message, String from) throws IOException { StringBuilder url = null; url = new StringBuilder(api_url); url.append("login=" + URLEncoder.encode(login, "utf-8")); url.append("&password=" + URLEncoder.encode(password, "utf-8")); url.append("&service=serviceId&space_force=1&space=" + URLEncoder.encode(from, "utf-8")); url.append( "&subno=" + URLEncoder.encode("+" + phone, "utf-8")); url.append("&text=" + URLEncoder.encode(message, "utf-8")); URL u = new URL(url.toString()); InputStream is = u.openStream(); InputStreamReader reader = new InputStreamReader(is); String line = ""; int ch; while ((ch = reader.read()) != -1) { line = line + (char)ch; } reader.close(); return line; } } 2. Как написано в документации, реализовал метод send() из интерфейса ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender Код: package crmifc.sms; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.plugin.server.BGPluginManagerServer; import ru.bitel.bgbilling.plugins.dispatch.common.bean.Contact; import ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender; import ru.bitel.common.Preferences; import ru.bitel.common.Utils; import javax.activation.DataSource; import java.util.List; import java.io.IOException; import org.apache.log4j.Logger; import crmifc.sms.SmsEvostok; public class SmsEvostokSender implements Sender { private static final Logger logger = Logger.getLogger(SmsEvostok.class); private Preferences pluginPreferences = BGPluginManagerServer.getManager().getPlugin("ru.bitel.bgbilling.plugins.dispatch").getSetup(); public SmsEvostokSender() {}; @Override public void send(Contact contact, String title, String messageBody, List<javax.activation.DataSource> files) throws BGException { String login = pluginPreferences.get("sender.sms.evastok.login"); String password = pluginPreferences.get("sender.sms.evastok.password"); String api_url = pluginPreferences.get("sender.sms.evastok.url"); if ((Utils.isBlankString(login)) || (Utils.isBlankString(password))) { throw new BGException("Не заполнен параметр логин и/или пароль."); } SmsEvostok smsEvostok = new SmsEvostok(login, password, api_url); try { String result = smsEvostok.sendMsg(contact.getValueForSend(), messageBody, title); if (logger.isDebugEnabled()) { logger.debug("\t\t\tSms-сообщение по номеру " + contact.getValueForSend() + " отправлено. Результат: " + result); } } catch(IOException e) { throw new BGException("Сбой при отправке смс: " + e.getMessage(), e); } } } 3. Сделал тестовый класс, в котором захардкодил тестовые данные для проверки что все работает: Код: package crmifc.sms; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import crmifc.sms.SmsEvostok; import java.io.IOException; import ru.bitel.common.Preferences; import ru.bitel.bgbilling.kernel.plugin.server.BGPluginManagerServer; public class Test extends GlobalScriptBase { private Preferences pluginPreferences = BGPluginManagerServer.getManager().getPlugin("ru.bitel.bgbilling.plugins.dispatch").getSetup(); @Override public void execute( Setup setup1, ConnectionSet connectionSet2 ) throws Exception { String login = pluginPreferences.get("sender.sms.evastok.login"); String password = pluginPreferences.get("sender.sms.evastok.password"); String api_url = pluginPreferences.get("sender.sms.evastok.url"); String phone = "<номер телефона>"; String from = "<от кого>"; String text = "test test 123"; SmsEvostok smsEvostok = new SmsEvostok( login, password, api_url); try { String result = smsEvostok.sendMsg( phone, text, from); print( result ); } catch( IOException e ) { e.printStackTrace(); } } } Нажимаю на кнопочку Run. Получаю сообщение. Все Ок. 4. Далее пробую через сам плагин Dispatch все это сделать: - В менеджере контактов создать новый контакт с типом телефон, шаблон пользовательский, шаблон ^\d+$, и параметр по-умолчанию поле с телефоном в нашем шаблоне договора. Все как в мануале. - В методах отправки создаю свой тип отправки, и указываю динамический класс crmifc.sms.EvostokSender который я реализовал. - В планировщике заданий делаю создаю новую задачу "Задача отправки рассылок" в временем запуска */*/*/*/* - В плагине создаю тестовую рассылку, в поле тип рассылки указываю свой тип, в поле тип контактов сове поле телефон, активна, персональная, указываю нужное мне время, ну и сообщение. - Добавляю тестовую рассылку в договор. Все. Смотрю что мне скажет планировщик: Код: 07-27/16:19:02 ERROR [pool-2-thread-4] DispatchWorker - java.lang.reflect.UndeclaredThrowableException at com.sun.proxy.$Proxy20.send(Unknown Source) at ru.bitel.bgbilling.plugins.dispatch.server.bean.MessageProcessor.send(MessageProcessor.java:265) at ru.bitel.bgbilling.plugins.dispatch.server.task.DispatchWorker.executeTask(DispatchWorker.java:136) 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) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ru.bitel.bgbilling.kernel.dynamic.server.DynamicClassManager$UpdatingInvocationHandler.invoke(DynamicClassManager.java:226) ... 7 more Caused by: ru.bitel.bgbilling.common.BGException: Сбой при отправке смс: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at crmifc.sms.SmsEvostokSender.send(SmsEvostokSender.java:47) ... 11 more Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at java.net.URL.openStream(URL.java:1045) at crmifc.sms.SmsEvostok.sendMsg(SmsEvostok.java:37) at crmifc.sms.SmsEvostokSender.send(SmsEvostokSender.java:39) ... 11 more Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) ... 26 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ... 32 more 07-27/16:19:02 INFO [pool-2-thread-4] DispatchWorker - Task finished time=906 ms. Что не так-то ? Где ошибся или что пропустил ? Кто подскажет ? |
Автор: | Dipress [ 28 июл 2018, 15:16 ] |
Заголовок сообщения: | Re: Реализация интерфейса Sender |
Разобрался в чем была проблема. Оказывается в самой джаве, которая стоит на сервере, стоял старый билд в котором не было нужных сертификатов. Обновил на новый билд, сразу все пошло. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |