Atomic SMS Sender

Bulk SMS Service

Class 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);
     }
}

 

Class 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();
        }
    }
}

 

Class 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;
    }
    
}

 

Class 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();        
    }  
}

 

Usage example

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>
      */
   }    
}
Very convenient service for bulk sms sending. There is no need for the cell phone – thаt is important to me. Good product! Read more »
Alexander
Euromed-D
I had tried a few different mass sms services before i found Atomic SMS Sender, i found it easy to use, it worked perfectly and got the job done quickly at a great price compared to others i have used, so i would definitely recommend this service Read more »
Richard James
Icontact.ae
Start using Atomic SMS Sender today for free!

 

Activate your account and get 10 SMS messages to try our service for free.

Click the "download" button to download software and then click the "save file" button when prompted.