使用网址发送阿拉伯语消息

时间:2016-03-29 05:09:10

标签: java jsp

我想发送带有阿拉伯语消息的短信。

我使用此代码:

sendSMS.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="mobily.sms.java.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html  >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<%
    String balance="";
    Mobily m=new Mobily();
    if(request.getParameter("mode")!= null && request.getParameter("mode").equals("send")){
        String senderName=request.getParameter("txtSender");
        String message=request.getParameter("txtMessage");
        String numbers=request.getParameter("txtNumbers");
        m.sendMessage("","",senderName,message,numbers);
        balance=m.checkBalance("","");
        String output=m.getMessage();
        out.println(output);
    }else{
        balance=m.checkBalance("","");
    }
%>
<body>
<form action="sendSMS.jsp">
    <table border="1">
        <tr>
            <td colspan="2"  align="center" >Mobily Send SMS Form</td>

        </tr>
        <tr>
            <td>Balance:</td>
            <td><%= balance %></td>
        </tr>
        <tr>
            <td>Sender Name:</td>
            <td><input type="Text" name="txtSender"/></td>
        </tr>
        <tr>
            <td>Message :</td>
            <td><textarea id="txtMessage" cols="20" name="txtMessage" rows="5"></textarea></td>
        </tr>
        <tr>
            <td>Number(s):</td>
            <td><input type="Text" name="txtNumbers"/></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="Send"/></td>
        </tr>


    </table>
    <input type="hidden" name="mode" value ="send"/>
</form>
</body>
</html>

Mobily.java

/**********************************************************************************************/
/**********************************************************************************************/
/************                               OperationNumber                        ************/
/************                               ---------------                        ************/
/************         1.Send SMS                                                   ************/
/************         2.Send Status                                                ************/
/************         3.ChangePassword                                             ************/
/************         4.ForgetPassword                                             ************/
/************         5.Balance                                                    ************/
/************         6.Active Sender                                              ************/
/************         7.Check Sender                                               ************/
/************         8.Add Sender                                                 ************/
/**********************************************************************************************/
/**********************************************************************************************/

package mobily.sms.java;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class Mobily {
    private String msg="";
    private String balance="";
    static char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};


    public void sendMessage(String userName,String password,String sender,String message,String numbers) throws UnsupportedEncodingException{
            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 void sendStatus(){
        sendURL("http://www.mobily.ws/api/sendStatus.php","",2);
    }


    public void changePassword(String userName,String password,String newPassword){
        String para="mobile="+userName+"&password="+password+"&newPassword="+newPassword;
        sendURL("http://www.mobily.ws/api/changePassword.php",para,3);
    }



    public void forgetPasswrd(String userName,String type){
        String para="mobile="+userName+"&type="+type;
        sendURL("http://www.mobily.ws/api/forgetPassword.php",para,4);
    }


    public String checkBalance(String userName,String password){
        String para="mobile="+userName+"&password="+password;
        sendURL("http://www.mobily.ws/api/balance.php",para,5);
        return balance;
    }


    public void ActiveSender(String userName,String Password,String senderID,String activeKey){
        String para="mobile="+userName+"&password="+Password+"&senderId="+senderID+"&activeKey="+activeKey;
        sendURL("http://www.mobily.ws/api/activeSender.php",para,6);
    }


    public void checkSender(String userName,String password,String senderID){
        String para="mobile="+userName+"&password="+password+"&senderId="+senderID;
        sendURL("http://www.mobily.ws/api/checkSender.php",para,7);
    }
    public String getMessage(){
        return msg;
    }
    //**********************************************************************************************//
    //*********************************                         ************************************//
    //*********************************conver to unicode Methods************************************//
    //*********************************                         ************************************//
    //**********************************************************************************************//

    public static String convertUnicode(String str) {
        char[] chars = str.toCharArray();
        StringBuffer strBuffer = new StringBuffer();
        for (int i = 0; i < chars.length; i++) {
            strBuffer.append(forDigits( Integer.toHexString((int) chars[i])));
        }
        return strBuffer.toString();
    }
        public static String bytesToHex(byte[] b, int off, int len) {
        StringBuffer buf = new StringBuffer();
        for (int j=0; j<len; j++)
            buf.append(byteToHex(b[off+j]));
            return buf.toString();
    }
    public static String byteToHex(byte b) {
        char[] a = { 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 selectedMessage(int value,int operationNumber){
        switch(operationNumber){
            case 1:switch(value){
                        case 1:msg= "تمت العملية بنجاح";break;
                        case 2:msg="إن رصيدك لدى موبايلي قد إنتهى ولم يعد به أي رسائل. (لحل المشكلة قم بشحن رصيدك من الرسائل لدى موبايلي. لشحن رصيدك إتبع تعليمات شحن الرصيد";break;
                        case 3:msg="إن رصيدك الحالي لا يكفي لإتمام عملية الإرسال. (لحل المشكلة قم بشحن رصيدك من الرسائل لدى موبايلي. لشحن رصيدك إتبع تعليمات شحن الرصيد";break;
                        case 4:msg="إن إسم المستخدم الذي إستخدمته للدخول إلى حساب الرسائل غير صحيح (تأكد من أن إسم المستخدم الذي إستخدمته هو نفسه الذي تستخدمه عند دخولك إلى موقع موبايلي).";break;
                        case 5:msg="هناك خطأ في كلمة المرور (تأكد من أن كلمة المرور التي تم إستخدامها هي نفسها التي تستخدمها عند دخولك موقع موبايلي,إذا نسيت كلمة المرور إضغط على رابط نسيت كلمة المرور لتصلك رسالة على جوالك برقم المرور الخاص بك";break;
                        case 6:msg="إن صفحة الإرسال لاتجيب في الوقت الحالي (قد يكون هناك طلب كبير على الصفحة أو توقف مؤقت للصفحة فقط حاول مرة أخرى أو تواصل مع الدعم الفني إذا إستمر الخطأ";break;
                        case 12:msg="إن حسابك بحاجة إلى تحديث يرجى مراجعة الدعم الفني";break;
                        case 13:msg="إن إسم المرسل الذي إستخدمته في هذه الرسالة لم يتم قبوله. (يرجى إرسال الرسالة بإسم مرسل آخر أو تعريف إسم المرسل لدى موبايلي";break;
                        case 14:msg="إن إسم المرسل الذي إستخدمته غير معرف لدى موبايلي. (يمكنك تعريف إسم المرسل من خلال صفحة إضافة إسم مرسل";break;
                        case 15:msg="يوجد رقم جوال خاطئ في الأرقام التي قمت بالإرسال لها. (تأكد من صحة الأرقام التي تريد الإرسال لها وأنها بالصيغة الدولية";break;
                        case 16:msg="الرسالة التي قمت بإرسالها لا تحتوي على إسم مرسل. (أدخل إسم مرسل عند إرسالك الرسالة";break;
                        case 17:msg="م يتم ارسال نص الرسالة. الرجاء التأكد من ارسال نص الرسالة والتأكد من تحويل الرسالة الى يوني كود (الرجاء التأكد من استخدام الدالة";break;
                        case -1:msg="لم يتم التواصل مع خادم (Server) الإرسال موبايلي بنجاح. (قد يكون هناك محاولات إرسال كثيرة تمت معا , أو قد يكون هناك عطل مؤقت طرأ على الخادم إذا إستمرت المشكلة يرجى التواصل مع الدعم الفني)";break;
                        case -2:msg="لم يتم الربط مع قاعدة البيانات (Database) التي تحتوي على حسابك وبياناتك لدى موبايلي. (قد يكون هناك محاولات إرسال كثيرة تمت معا , أو قد يكون هناك عطل مؤقت طرأ على الخادم إذا إستمرت المشكلة يرجى التواصل مع الدعم الفني)";break;
                        default:msg="";break;
                   }break;
            case 2:switch(value){
                        case 1:msg= "يمكنك الإرسال الآن.";break;
                        default:msg="الإرسال متوقف الآن.";break;
                   }break;
            case 3:switch(value){
                        case 1:msg= "رقم الجوال غير متوفر.";break;
                        case 2:msg="كلمه المرور القديمه خاطئه.";break;
                        case 3:msg="عملية تغيير آلمة المرور تمت بنجاح.";break;
                        default:msg="";break;
                   }break;
            case 4:switch(value){
                        case 1:msg= "رقم الجوال غير متوفر..";break;
                        case 2:msg="الإيميل الخاص بالحساب غير متوفر.";break;
                        case 3:msg="تم إرسال آلمة المرور على الجوال بنجاح.";break;
                        case 4:msg="رصيدك غير آافي لإتمام عملية الإرسال.";break;
                        case 5:msg="تم إرسال آلمة المرور على الإيميل بنجاح.";break;
                        case 6:msg="الإيميل الخاص بالحساب غير صحيح.";break;
                        case 7:msg="إسم الحساب المستخدم غير صحيح.";break;
                        default:msg="";break;
                   }break;
            case 5:switch(value){
                        case 1:msg= "رقم الجوال غير متوفر.";break;
                        case 2:msg= "آلمة المرور خاطئه.";break;
                        default:msg=balance;break;
                   }break;

            case 7:switch(value){
                        case 0:msg= "اسم المرسل غير مفعل.";break;
                        case 1:msg= "إسم المرسل مفعل.";break;
                        case 2:msg="إسم المرسل مرفوض (تم ادخال آود التفعيل لهذا المرسل 3 مرات خطأ)";break;
                        case 3:msg="رقم الجوال غير متوفر.";break;
                        case 4:msg="كلمه المرور خاطئه.";break;
                        default:msg="";break;
                   }break;
            }
    }
    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();
            // Get Response
            BufferedReader rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            // - For 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());
        }
    }


}

我可以发送短信,但手机中收到的短信格式有问题。

我从界面发送此消息:تمتالموافقةعلىطلبكم

但是手机中收到的消息是:

&#1578;&#1605;&#1578; &#1575;&#1604;&#1605;&#1608;&#1575;&#1601;&#1602;&#1577; &#1593;&#1604;&#1609; &#1591;&#1604;&#1576;&#1603;&#1605;

我尝试修改编码没有成功:

我更改 sendMessage 方法:

public void sendMessage(String userName,String password,String sender,String message,String numbers) throws UnsupportedEncodingException{
    String message1 = new String(message.getBytes("cp1256"), "cp1256"); 
    System.out.println(message1);
        String para ="mobile=" + userName + "&password=" + password + "&numbers=" + numbers+ "&sender=" + sender + "&msg=" + convertUnicode(message1) + "&applicationType=24";
        sendURL("http://www.mobily.ws/api/msgSend.php",para,1);
        System.out.println(getMessage());
}

我也尝试修改 sendURL 方法:

urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
            urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36");

我改变了jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="mobily.sms.java.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html  >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

0 个答案:

没有答案