В данном уроке я научу вас отправлять СМС сообщения на java, обратите внимания, что отправить СМС сообщение бесплатно нельзя.
Не так давно у меня возникла неплохая идея, но для её реализации мне нужно было найти способ отправки СМС в Java.
Я начал искать и выяснилось, что бесплатно это сделать нельзя. Хоть это и так понятно я все же решил поискать. После того как я понял что бесплатного способа не существует, решил найти платный но не очень дорогой и качественный, и вот несколько часов поиска привели меня к сервису, который на мое мнение неплохой как по ценам так и по отзывам.
Сервис который я нашел называется СМСЦЕНТР.
И сейчас я покажу как с его помощью можно отправлять СМС сообщения.
Шаг 1
Первое что мы делаем это идем сюда и регистрируемся.
После чего заполняете регистрационную форму.
Шаг 2
После регистрации вы попадете в админку, где вам нужно зайти Мой кабинет и выбрать пункт Получить 3.95 грн на счет для тестирования:
Выбираем -> Для получения тестовой суммы введите номер телефона в Настройках:
После этого сохраняем и выбираем Подтвердить номер.
Вам на телефон придет СМС сообщение, где будет код подтверждения. Вводим его в поле.
После подтверждения обновляем страницу и видим:
Теперь у нас есть денежные средства для тестирование этого сервиса.
Шаг 3
Создаем в Intellij IDEA новый проект File->New project->Maven Project.
Создаем класс Main и метод main().
Шаг 4
Теперь разберем как использовать API сервиса.
Давай теперь познакомимся с предоставляемым API http://smsc.ru/api/java/
Скачиваем smsc_api.java и кидаем в ваш проект src/main/java/smsc_api.java
Я его переименновал на SMSCSender.java
А также я немного изменил этот файл, так как видно по названием и типу написания, что писал API не Java программист и вот, что получилось:
import java.net.*; import java.io.*; import java.lang.Math; public class SMSCSender { private String SMSC_LOGIN = "<login>"; // логин клиента private String SMSC_PASSWORD = "<password>"; // пароль или MD5-хеш пароля в нижнем регистре private boolean SMSC_HTTPS = false; // использовать HTTPS протокол private String SMSC_CHARSET = "utf-8"; // кодировка сообщения: koi8-r, windows-1251 или utf-8 (по умолчанию) private boolean SMSC_DEBUG = false; // флаг отладки private boolean SMSC_POST = false; // Использовать метод POST public SMSCSender() { } public SMSCSender(String login, String password) { SMSC_LOGIN = login; SMSC_PASSWORD = password; } public SMSCSender(String login, String password, String charset) { SMSC_LOGIN = login; SMSC_PASSWORD = password; SMSC_CHARSET = charset; } public SMSCSender(String login, String password, String charset, boolean debug) { SMSC_LOGIN = login; SMSC_PASSWORD = password; SMSC_CHARSET = charset; SMSC_DEBUG = debug; } public String[] sendSms(String phones, String message, int translit, String time, String id, int format, String sender, String query) { String[] formats = {"", "flash=1", "push=1", "hlr=1", "bin=1", "bin=2", "ping=1"}; String[] m = {}; try { m = SmscSendCmd("send", "cost=3&phones=" + URLEncoder.encode(phones, SMSC_CHARSET) + "&mes=" + URLEncoder.encode(message, SMSC_CHARSET) + "&translit=" + translit + "&id=" + id + (format > 0 ? "&" + formats[format] : "") + (sender == "" ? "" : "&sender=" + URLEncoder.encode(sender, SMSC_CHARSET)) + (time == "" ? "" : "&time=" + URLEncoder.encode(time, SMSC_CHARSET)) + (query == "" ? "" : "&" + query)); } catch (UnsupportedEncodingException e) { } if (SMSC_DEBUG) { if (Integer.parseInt(m[1]) > 0) { System.out.println("Сообщение отправлено успешно. ID: " + m[0] + ", всего SMS: " + m[1] + ", стоимость: " + m[2] + ", баланс: " + m[3]); } else { System.out.print("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); System.out.println(Integer.parseInt(m[0])>0 ? (", ID: " + m[0]) : ""); } } return m; } public String[] getSmsCost(String phones, String message, int translit, int format, String sender, String query){ String[] formats = {"", "flash=1", "push=1", "hlr=1", "bin=1", "bin=2", "ping=1"}; String[] m = {}; try { m = SmscSendCmd("send", "cost=1&phones=" + URLEncoder.encode(phones, SMSC_CHARSET) + "&mes=" + URLEncoder.encode(message, SMSC_CHARSET) + "&translit=" + translit + (format > 0 ? "&" + formats[format] : "") + (sender == "" ? "" : "&sender=" + URLEncoder.encode(sender, SMSC_CHARSET)) + (query == "" ? "" : "&" + query)); } catch (UnsupportedEncodingException e) { } // (cost, cnt) или (0, -error) if (SMSC_DEBUG) { if (Integer.parseInt(m[1]) > 0) { System.out.println("Стоимость рассылки: " + m[0] + ", Всего SMS: " + m[1]); } else { System.out.print("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); } } return m; } public String[] getStatus(int id, String phone, int all){ String[] m = {}; String tmp; try { m = SmscSendCmd("status", "phone=" + URLEncoder.encode(phone, SMSC_CHARSET) + "&id=" + id + "&all=" + all); if (SMSC_DEBUG) { if (m[1] != "" && Integer.parseInt(m[1]) >= 0) { java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Integer.parseInt(m[1])); System.out.println("Статус SMS = " + m[0]); } else System.out.println("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); } if (all == 1 && m.length > 9 && (m.length < 14 || m[14] != "HLR")) { tmp = implode(m, ","); m = tmp.split(",", 9); } } catch (UnsupportedEncodingException e) { } return m; } public String getBalance() { String[] m = {}; m = SmscSendCmd("balance", ""); // (balance) или (0, -error) if (SMSC_DEBUG) { if (m.length == 1) System.out.println("Сумма на счете: " + m[0]); else System.out.println("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); } return m.length == 2 ? "" : m[0]; } private String[] SmscSendCmd(String cmd, String arg){ String[] m = {}; String ret = ","; try { String url = (SMSC_HTTPS ? "https" : "http") + "://smsc.ru/sys/" + cmd +".php?login=" + URLEncoder.encode(SMSC_LOGIN, SMSC_CHARSET) + "&psw=" + URLEncoder.encode(SMSC_PASSWORD, SMSC_CHARSET) + "&fmt=1&charset=" + SMSC_CHARSET + "&" + arg; int i = 0; do { if (i > 0) Thread.sleep(2000); ret = SmscReadUrl(url); } while (ret == "" && ++i < 3); } catch (UnsupportedEncodingException e) { } catch (InterruptedException e) { } return ret.split(","); } private String SmscReadUrl(String url) { String line = "", real_url = url; String[] param = {}; boolean is_post = (SMSC_POST || url.length() > 2000); if (is_post) { param = url.split("\\?",2); real_url = param[0]; } try { URL u = new URL(real_url); InputStream is; if (is_post){ URLConnection conn = u.openConnection(); conn.setDoOutput(true); OutputStreamWriter os = new OutputStreamWriter(conn.getOutputStream(), SMSC_CHARSET); os.write(param[1]); os.flush(); os.close(); System.out.println("post"); is = conn.getInputStream(); } else { is = u.openStream(); } InputStreamReader reader = new InputStreamReader(is, SMSC_CHARSET); int ch; while ((ch = reader.read()) != -1) { line += (char)ch; } reader.close(); } catch (MalformedURLException e) { // Неверно урл, протокол... } catch (IOException e) { } return line; } private static String implode(String[] ary, String delim) { String out = ""; for (int i = 0; i < ary.length; i++) { if (i != 0) out += delim; out += ary[i]; } return out; } }
После этого можно добавить ваши данные в данное API:
String SMSC_LOGIN = "demotest"; // логин клиента String SMSC_PASSWORD = "<ваш пароль>"; // пароль или MD5-хеш пароля в нижнем регистре boolean SMSC_HTTPS = false; // использовать HTTPS протокол String SMSC_CHARSET = "utf-8"; // кодировка сообщения: koi8-r, windows-1251 или utf-8 (по умолчанию) boolean SMSC_DEBUG = false; // флаг отладки boolean SMSC_POST = true; // Использовать метод POST
Но это не обязательно, так как все это можно про инициализировать с помощью конструктора:
SMSCSender sd= new SMSCSender("demotest", "demotest", "utf-8", true);
Шаг 5
Отправляем СМС:
public class Main { public static void main(String[] args) { SMSCSender sd= new SMSCSender("<логин>", "<пароль>", "utf-8", true); sd.sendSms("38*********5", "Ваш пароль: 123", 1, "", "", 0, "", ""); sd.getSmsCost("38*********5", "Вы успешно зарегистрированы!", 0, 0, "", ""); sd.getBalance(); } }
После выполнения данного кода мы увидим в консоли:
post Сообщение отправлено успешно. ID: 1, всего SMS: 1, стоимость: 0.16, баланс: 3.79 post Стоимость рассылки: 0.16, Всего SMS: 1 post Сумма на счете: 3.79
СМС пришло в течении 3 сек.
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
7 комментариев к статье "Как отправить СМС в Java?"