2017-06-10 3 views
0

J'ai un problème où je ne peux pas envoyer de SMS de plus de 255 mots. J'ai fait quelques recherches sur la façon de concaténer les messages, mais je n'arrive toujours pas à le faire fonctionner. Quelqu'un peut-il me conseiller à ce sujet? Voici mon code:Concaténer SMS via SMPP

private int SMSMt(String pstrLoginName, String pstrServiceID, String 
pstrCPID, String pstrMSISDN, String pstrKeyword, String pstrPriceCode, 
String pstrChargeMSISDN, String pstrSubID, String pstrDstTrxID, String 
pstrShortCode, String pstrSMS, String pstrLanguage, SubmitResult pobjRst) 
{ 
    int intResult = 0; 
    try 
    { 
     if (!this.mobjSMPP.mblnBound) 
     { 
      intResult = 9910; 
     } 
     else 
     { 
      SubmitSM objReq = new SubmitSM(); 
      Address objSrcAddress = new Address(); 
      Address objDstAddress = new Address(); 

      objSrcAddress.setNpi((byte)1); 
      objSrcAddress.setTon((byte)0); 
      objSrcAddress.setAddress(pstrShortCode); 

      objDstAddress.setNpi((byte)1); 
      objDstAddress.setTon((byte)0); 
      objDstAddress.setAddress(pstrMSISDN); 

      objReq.setServiceType(""); 
      objReq.setSourceAddr(objSrcAddress); 
      objReq.setDestAddr(objDstAddress); 
      objReq.setReplaceIfPresentFlag((byte)0); 

      objReq.setScheduleDeliveryTime(""); 
      objReq.setValidityPeriod(""); 
      objReq.setPriorityFlag((byte)1); 
      objReq.setRegisteredDelivery((byte)1); 
      objReq.setUserMessageReference((short)25); 

      WriteLog("pstrLanguage=" + pstrLanguage); 
      if (pstrLanguage.equals("1")) { 
       objReq.setDataCoding((byte)8); 
       WriteLog("Ori pstrSMS=" + pstrSMS); 
       objReq.setShortMessage(pstrSMS,"UTF_16BE"); 

       //String HexStr = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "\u0eaa" + "C"); 
       //WriteLog("HexStr=" + HexStr); 
       //pstrSMS = stringToHex(pstrSMS); 

       //StringConverter TestRun = new StringConverter(pstrSMS); 

       /*pstrSMS = HexStr;*/ 
       //pstrSMS = new String("\u0eaa"); 
       //pstrSMS = new String("0x0eaa"); 

       /*pstrSMS = "世界您好"; 
       WriteLog("Ori pstrSMS=" + pstrSMS); 
       //byte[] messageData = new ASCIIEncoding().encode(pstrSMS); 

       byte[] b = s.getBytes(StandardCharsets.US_ASCII);*/ 

       WriteLog("Ori pstrSMS [unicode]=" + pstrSMS); 

       //byte[] textByte = pstrSMS.getBytes("UTF-16BE"); 
       //WriteLog("HexCode [encoded with UTF-16BE]= " + textByte); 
       //pstrSMS = textByte.toString(); //cannot convert byte[] to string 

     } 
     else { 
      objReq.setDataCoding((byte)0); 
      objReq.setShortMessage(pstrSMS); 
     } 
+0

Avez-vous trouvé ma réponse utile, ou avez-vous besoin d'aide? – Marvin

+0

vous pouvez utiliser message_payload tlv pour gérer plus de 255 bytes sms (si supporté par votre smsc). OU utiliser l'ancien User Data Header (UDH) + fragement de la méthode de message – rajesh6115

Répondre

0

La définition d'une référence utilisateur (setUserMessageReference) n'est pas suffisante. Vous devez également définir le nombre de fragments et le nombre de fragments. Selon les méthodes de la bibliothèque. En outre, vous devez diviser le message en 255 blocs. Donc, si vous avez un message 400 octets, alors vous faire quelque chose comme ceci:

First fragment: 
    setReference=25 
    numberOfFragments=2 
    fragmentNumber=1 
    message=first 255 bytes 

    Second fragment: 
    setReference=25 
    numberOfFragments=2 
    fragmentNumber=2 
    message=rest 145 bytes 

Notez également que de nombreux fournisseurs de SMSC permettent SMPP à fragmentation interne. Il y a 2 paramètres SMPP pour traiter un message:

1)Message(mandatory) (limited to 255 bytes) 
2)Payload message(optional) (not limited)