Пример работы с 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   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.myatompark.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>
      */
   }    
}