i want send sms contain arabic message using java api
mobily provider offers java api send sms
i used code java :
public void sendmessage(string username,string password,string sender,string message,string numbers){ string para ="mobile=" + username + "&password=" + password + "&numbers=" + numbers+ "&sender=" + sender + "&msg=" + convertunicode(message) + "&applicationtype=24"; sendurl("http://www.mobily.ws/api/msgsend.php",para,1); system.out.println(getmessage()); } public static string convertunicode(string a) { int bufsize = 16; byte[] buffer = new byte[bufsize]; string s = null; try { buffer=a.getbytes(); s = bytestohex(buffer,0,buffer.length); system.out.println("hex: "+s); } catch (exception e) { system.out.println(e.tostring()); } return s; } public static string bytestohex(byte[] b, int off, int len) { stringbuffer buf = new stringbuffer(); (int j=0; j<len; j++) buf.append(bytetohex(b[off+j])); return buf.tostring(); } public static string bytetohex(byte b) { char[] = { hexdigit[(b >> 4) & 0x0f], hexdigit[b & 0x0f] }; return fordigits(new string(a)); } public static string fordigits(string val){ switch (val.length() ){ case 1:return "000"+val; case 2:return "00"+val; case 3:return "0"+val; case 4:return ""+val; default:return val; } } public void sendurl(string url,string parameters,int operationnumber){ try { url url; urlconnection urlconnection; dataoutputstream outstream; // create connection url = new url(url); urlconnection = url.openconnection(); ((httpurlconnection)urlconnection).setrequestmethod("post"); urlconnection.setdoinput(true); urlconnection.setdooutput(true); urlconnection.setusecaches(false); urlconnection.setrequestproperty("content-type", "application/x-www-form-urlencoded"); urlconnection.setrequestproperty("content-length", ""+ parameters.length()); urlconnection.setrequestproperty("user-agent","mozilla/4.0"); // create i/o streams outstream = new dataoutputstream(urlconnection.getoutputstream()); // send request outstream.writebytes(parameters); outstream.flush(); outstream.close(); // response bufferedreader rd = new bufferedreader(new inputstreamreader(urlconnection.getinputstream())); // - debugging purposes only! string buffer; while((buffer = rd.readline()) != null) { try{ selectedmessage(integer.parseint(buffer),operationnumber); }catch(exception ex){ balance=buffer; } } // close i/o streams rd.close(); outstream.close(); } catch(exception ex) { system.out.println("exception cought:\n"+ ex.tostring()); } } the problem buffer value "-1-"
this value filled in line :
buffer = rd.readline()
so find myself in exception
}catch(exception ex){ balance=buffer; }
the parameters sent in sendmessage method:
sender :شارع علي
message :وجهت إلى
numbers : 00966569114455
updated :
i arrived send message in english
sender : test
message : test
in line while((buffer = rd.readline()) != null) {
the value of buffer equal 1
the problem sending messages in arabic
i try change code without success :
while((buffer = rd.readline()) != null) { try{ buffer = buffer.replaceall("(-?[0-9]+)([^0-9]*)?","$1"); buffer=buffer.replace("-", ""); selectedmessage(integer.parseint(buffer),operationnumber); }catch(exception ex){ balance=buffer; } also in line in sendurl method:
urlconnection.setrequestproperty("content-type", "application/x-www-form-urlencoded; charset=utf-8"); and in line in convertunicode method :
buffer=a.getbytes(standardcharsets.utf_8); this function return final message :
public void selectedmessage(int value,int operationnumber){ switch(operationnumber){ case 1:switch(value){ case 1:msg= "success";break; case 2:msg="error";break; }break; } } with modified code force buffer value equal 1
in sendurl method value of parameters :
mobile=966556541236&password=123654&numbers=966569114455&sender=شارع علي&msg=00d800a700d9008400d9008500d800b900d800a700d9008500d9008400d800a9002000d800b100d9008200d9008500d9008800d800ac00d9008700d800aa002000d800a500d9008400d90089002000d9008600d800b800d800a700d90085002000d9008400d9008400d800aa00d800af00d800b100d9008a00d800a8&applicationtype=24
you might consider doing regex replaceall on input first, filter input.
example:
buffer = rd.readline().replaceall("(-?[0-9]+)([^0-9]*)","$1"); this convert input so:
-1- -> -1 -1 -> -1 1- -> 1
Comments
Post a Comment