menu
Пример работы с SMS шлюзом на языке Java
Класс API.java:
package sms.api.v2; import java.util.ArrayList; import java.util.Map; public class API { private sms.api.v2.RequestBuilder reqBuilder; private String login; private String password; public API(sms.api.v2.RequestBuilder reqBuilder,String login, String password) { this.reqBuilder = reqBuilder; this.login=login; this.password=password; } public String getStatus(String msgId){ String request="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; request=request.concat("<SMS><operations><operation>GETSTATUS</operation></operations>"); request=request.concat("<authentification>"); request=request.concat("<username>"+this.login+"</username>"); request=request.concat("<password>"+this.password+"</password>"); request=request.concat("</authentification>"); request=request.concat("<statistics>"); request=request.concat("<messageid>"+msgId+"</messageid>"); request=request.concat("</statistics>"); request=request.concat("</SMS>"); return this.reqBuilder.doXMLQuery(request); } public String getPrice(String text, Map<String, String> phones){ String request="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; request=request.concat("<SMS>"); request=request.concat("<operations> "); request=request.concat("<operation>GETPRICE</operation>"); request=request.concat("</operations> "); request=request.concat("<authentification>"); request=request.concat("<username>"+this.login+"</username>"); request=request.concat("<password>"+this.password+"</password>"); request=request.concat("</authentification>"); request=request.concat("<message>"); request=request.concat("<sender>SMS</sender>"); request=request.concat("<text>"+text+"</text>"); request=request.concat("</message>"); request=request.concat("<numbers>"); for (Map.Entry entry : phones.entrySet()) { request=request.concat("<number messageID=\""+entry.getKey()+"\">"+entry.getValue()+"</number>"); } request=request.concat("</numbers>"); request=request.concat("</SMS>"); return this.reqBuilder.doXMLQuery(request); } public String getBalance(){ String request="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; request=request.concat("<SMS>"); request=request.concat("<operations>"); request=request.concat("<operation>BALANCE</operation>"); request=request.concat("</operations>"); request=request.concat("<authentification>"); request=request.concat("<username>"+this.login+"</username>"); request=request.concat("<password>"+this.password+"</password>"); request=request.concat("</authentification> "); request=request.concat("</SMS>"); return this.reqBuilder.doXMLQuery(request); } public String sendSms(String sender, String text, ArrayList<Phones> phones){ String request="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; request=request.concat("<SMS>"); request=request.concat("<operations>"); request=request.concat("<operation>SEND</operation>"); request=request.concat("</operations>"); request=request.concat("<authentification>"); request=request.concat("<username>"+this.login+"</username>"); request=request.concat("<password>"+this.password+"</password>"); request=request.concat("</authentification>"); request=request.concat("<message>"); request=request.concat("<sender>"+sender+"</sender>"); request=request.concat("<text>"+text+"</text>"); request=request.concat("</message>"); request=request.concat("<numbers>"); for (Phones phone : phones) { request=request.concat("<number"); if(phone.getIdMessage().length()>0) request=request.concat(" messageID=\""+phone.getIdMessage()+"\""); if(phone.getVariable().length()>0) request=request.concat(" variables=\""+phone.getVariable()+"\""); request=request.concat(">"); request=request.concat(phone.getPhone()); request=request.concat("</number>"); } request=request.concat("</numbers>"); request=request.concat("</SMS>"); return this.reqBuilder.doXMLQuery(request); } }
Класс Connector.java
package sms.api.v2; import java.io.IOException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; public class Connector { private static HttpURLConnection httpConn; private String URL; public Connector(String URL) { this.URL = URL; } /** * Makes an HTTP request using POST method to the specified URL. * @param params A map containing POST data in form of key-value pairs * @return An HttpURLConnection object * @throws IOException thrown if any I/O error occurred */ public static HttpURLConnection sendPostRequest(String requestURL, Map<String, String> params) throws IOException { URL url = new URL(requestURL); httpConn = (HttpURLConnection) url.openConnection(); httpConn.setUseCaches(false); httpConn.setDoInput(true); // true indicates the server returns response StringBuffer requestParams = new StringBuffer(); if (params != null && params.size() > 0) { httpConn.setDoOutput(true); // true indicates POST request Iterator<String> paramIterator = params.keySet().iterator(); boolean isFirst=true; while (paramIterator.hasNext()) { String key = paramIterator.next(); String value = params.get(key); if(!isFirst){ requestParams.append("&");} requestParams.append(key); requestParams.append("=").append(URLEncoder.encode(value,"UTF-8")); isFirst=false; } // sends POST data OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream()); //URLEncoder.encode(requestParams.toString(),"UTF-8") writer.write(requestParams.toString()); writer.flush(); } return httpConn; } /** * Returns only one line from the server's response. This method should be * used if the server returns only a single line of String. * * @return a String of the server's response * @throws IOException thrown if any I/O error occurred */ public static String readSingleLineRespone() throws IOException { InputStream inputStream = null; if (httpConn != null) { inputStream = httpConn.getInputStream(); } else { throw new IOException("Connection is not established."); } BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); String response = reader.readLine(); reader.close(); return response; } /** * Returns an array of lines from the server's response. This method should * be used if the server returns multiple lines of String. * * @return an array of Strings of the server's response * @throws IOException thrown if any I/O error occurred */ public static String[] readMultipleLinesRespone() throws IOException { InputStream inputStream = null; if (httpConn != null) { inputStream = httpConn.getInputStream(); } else { throw new IOException("Connection is not established."); } BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); List<String> response = new ArrayList<String>(); String line = ""; while ((line = reader.readLine()) != null) { response.add(line); } reader.close(); return (String[]) response.toArray(new String[0]); } /** * Closes the connection if opened */ public static void disconnect() { if (httpConn != null) { httpConn.disconnect(); } } }
Класс Phones.java:
package sms.api.v2; public class Phones { public String idMessage; public String varaibles; public String phone; public Phones(String idMessage,String variables,String phone){ this.phone=phone; this.varaibles=variables; this.idMessage=idMessage; } public String getIdMessage(){ return this.idMessage; } public String getVariable(){ return this.varaibles; } public String getPhone(){ return this.phone; } }
Класс RequestVuilder.java
package sms.api.v2; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class RequestBuilder { String URL; public RequestBuilder(String URL) { this.URL = URL; } public String doXMLQuery(String xml) { StringBuilder responseString = new StringBuilder(); Map <String, String> params=new HashMap(); params.put("XML", xml); try { Connector.sendPostRequest(this.URL, params); String[] response = Connector.readMultipleLinesRespone(); for (String line : response) { responseString.append(line); } } catch (IOException ex) { ex.printStackTrace(); } Connector.disconnect(); return responseString.toString(); } }
Пример использования
package sms.api.v2; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { String URL = "http://api.atompark.com/members/sms/xml.php"; String login="YOUR_LOGIN"; String password="YOUR_PASSWORD"; RequestBuilder Request= new RequestBuilder(URL); API ApiSms=new API(Request, login, password); //GET STATUS ************************************************************* System.out.print(ApiSms.getStatus("1299")); /* * response: <?xml version="1.0" encoding="UTF-8"?> <deliveryreport><message id="1299" sentdate="0000-00-00 00:00:00" donedate="0000-00-00 00:00:00" status="0" /></deliveryreport> */ //GET PRICE ************************************************************* Map<String, String> phones = new HashMap(); phones.put("id1", "+38063169****"); phones.put("id2", "+38093101****"); System.out.print(ApiSms.getPrice("Test sms",phones)); /* * response: <?xml version="1.0" encoding="UTF-8"?><RESPONSE><status>0</status><credits>0.682</credits></RESPONSE> */ //GET BALANCE ************************************************************* System.out.print(ApiSms.getBalance()); /* * response: <?xml version="1.0" encoding="UTF-8"?><RESPONSE><status>0</status><credits>780.64</credits></RESPONSE> */ //SEND PHONE ************************************************************* ArrayList<Phones> phoneSend=new ArrayList<Phones>(); phoneSend.add(new Phones("id1","","+38063169****")); phoneSend.add(new Phones("id2","","+38093101****")); System.out.print(ApiSms.sendSms("test", "test sms", phoneSend)); /* * response: <?xml version="1.0" encoding="UTF-8"?><RESPONSE><status>2</status><credits>0.682</credits></RESPONSE> */ } }Другие примеры:
Пример подключения к шлюзу ePochta SMS 3.0 на PHP
Пример работы с SMS шлюзом на языке C#
Пример работы с SMS шлюзом на языке Perl