精华内容
下载资源
问答
  • 最近在做的系统需要集成手机群发功能,在网上找了很多例子,没有几个能用的,于是只得自己写,初步调试通过,发上来与大家分享 这里采用的是直接通过COM口对GSMModem 发送AT指令的方式进行短信发送的,由于GSMModem发送...

    最近在做的系统需要集成手机群发功能,在网上找了很多例子,没有几个能用的,于是只得自己写,初步调试通过,发上来与大家分享

     

    这里采用的是直接通过COM口对GSMModem 发送AT指令的方式进行短信发送的,由于GSMModem发送短信有两种方式,一种是Text文本形式,另一种是PDU编码形式,Text文本形式只能发送英文短信,如果需要发送中文或其他语言短信,只能通过PDU编码形式发送,所以我下面的例子也是采用PDU形式,PDU形式需要对发送内容进行编码,我将其写成了一个类,供大家调用

     

    //此类负责发送内容的编码,将短信中心 messagecenternumber,接收方的号码:phonenumber,以及短信内容 messagecontent填写清楚后,调用EncodeSendContent方法返回编码后的文本,直接可以进行发送

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace GSMMode
    {
        class CEncodingPDU
        {
            /// <summary>
            /// 发送状态
            /// </summary>
            public enum MsgSendStatus
            {
                提醒=1,
                不提醒=2
            }

            public MsgSendStatus MsgSendState=MsgSendStatus.提醒;
            public string MessageCenterNumber;
            public string PhoneNumber;
            public string MessageContent;

            public string nLength;    //要发送内容的长度,由两部分组成,接收手机号加上要发送的内容

            /// <summary>
            /// 短信内容编码
            /// </summary>
            /// <param name="srvContent"></param>
            /// <returns></returns>
            private string EncodeContent()
            {
                Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
                string s = null;
                byte[] encodedBytes = encodingUTF.GetBytes(MessageContent);
                for (int i = 0; i < encodedBytes.Length; i++)
                {
                    s += BitConverter.ToString(encodedBytes, i, 1);
                }
                s = String.Format("{0:X2}{1}", s.Length / 2, s);

                return s;
            }

     

            /// <summary>
            /// 短信中心编码
            /// </summary>
            /// <param name="srvCenterNumber"></param>
            /// <returns></returns>
            private string EncodeMessageCenter()
            {
                string s = null;
                string centernumber = MessageCenterNumber.IndexOf("+86") == -1 ? "86" + MessageCenterNumber : MessageCenterNumber.Substring(1, MessageCenterNumber.Length - 1);

                int nLength = centernumber.Length;

                for (int i = 1; i < nLength; i += 2)                        //奇偶互换
                {
                    s += centernumber[i];
                    s += centernumber[i - 1];
                }
                if (!(nLength % 2 == 0))                            //是否为偶数,不是就加上F,并对最后一位与加上的F位互换
                {
                    s += 'F';
                    s += centernumber[nLength - 1];
                }
                s = String.Format("91{0}", s);                     //加上91,代表短信中心类型为国际化
                s = String.Format("{0:X2}{1}", s.Length / 2, s);    //编码后短信中心号长度,并格式化成二位十六制
                return s;
            }

            /// <summary>
            /// 电话号码编码
            /// </summary>
            /// <param name="srvNumber"></param>
            /// <returns></returns>
            private string EncodePhoneNumber()
            {
                string centernumber = PhoneNumber.IndexOf("+86") == -1 ? "86" + PhoneNumber : PhoneNumber.Substring(1, PhoneNumber.Length - 1);
                string s = null;

                int nLength = centernumber.Length;
                for (int i = 1; i < nLength; i += 2)                  //将奇数位和偶数位交换
                {
                    s += centernumber[i];
                    s += centernumber[i - 1];
                }
                if (!(nLength % 2 == 0))                               //是否为偶数,不是就加上F,并对最后一位与加上的F位互换
                {
                    s += 'F';
                    s += centernumber[nLength - 1];
                }
                return s;
            }


            /// <summary>
            /// pdu发送内容编码
            /// </summary>
            /// <param name="strCenterNumber"></param>
            /// <param name="strNumber"></param>
            /// <param name="strSMScontent"></param>
            /// <returns></returns>
            public string EncodeSendContent()
            {
                string tmpstr="";
                switch (MsgSendState)
                {
                    case MsgSendStatus.提醒:
                        {
                            tmpstr = "31000D91";
                            break;
                        }

                    case MsgSendStatus.不提醒:
                        {
                            tmpstr = "11000D91";
                            break;
                        }
                }
                if (tmpstr != "")
                {
                    string s = String.Format("{0}{1}{2}000800{3}", EncodeMessageCenter(), tmpstr, EncodePhoneNumber(), EncodeContent());
                    nLength = String.Format("{0:D2}", (s.Length - EncodeMessageCenter().Length) / 2);    //获取短信内容加上手机号码长度
                    return s;
                }
                else
                {
                    throw new Exception("没有设置是否发送提醒");
                }
            }
        }
    }

     

     

     

     

     

     

     

     

    //此类为通讯类,负责将编码后的文本发送到接收方手机

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO.Ports;

    namespace GSMMode
    {
        public class CCOMOperation
        {
            public class ReceivedDataEventArgs : EventArgs
            {
                public ReceivedDataEventArgs(SerialPort Serial)
                {
                    TargetSerial = Serial;
                }
                public SerialPort TargetSerial;
            }

            public static readonly string Key_CTRLZ = "/x1A";
            public static readonly string Key_ENTER = "/r";

            private SerialPort COMConnector;

            public delegate void EventRecivedMessage(object serder, ReceivedDataEventArgs e);
            public event EventRecivedMessage RecivedMessage = null;

            public CCOMOperation(string COMPortName)
            {
                COMConnector=new SerialPort(COMPortName);
                COMConnector.DataReceived += new SerialDataReceivedEventHandler(COMConnector_DataReceived);
            }

            void COMConnector_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                RecivedMessage(sender,new ReceivedDataEventArgs(COMConnector));
            }

            /// <summary>
            /// 打开COM端口
            /// </summary>
            /// <returns></returns>
            public bool OpenComConn()
            {
                if (!COMConnector.IsOpen)
                {
                    COMConnector.Open();
                }
               
                return COMConnector.IsOpen;
            }

            /// <summary>
            /// 关闭COM端口
            /// </summary>
            /// <returns></returns>
            public bool CloseComConn()
            {
                COMConnector.Close();
                return !COMConnector.IsOpen;
            }

            public bool SendCommand(string Command)
            {
                Console.WriteLine("SendMessage:" + Command);
                COMConnector.Write(Command);
                return true;
            }
        }
    }

    //具体调用代码:

                CCOMOperation TestCom = new CCOMOperation("COM3");
                CEncodingPDU test = new CEncodingPDU();


                test.MessageCenterNumber ="13800100500"

                test.MessageContent = "测试短信";
                test.MsgSendState = CEncodingPDU.MsgSendStatus.提醒;
                test.PhoneNumber ="18888888888";

                string MessageContent = test.EncodeSendContent();
                string MessageLen = test.nLength;

               
                TestCom.OpenComConn();

                TestCom.SendCommand("at+cmgf=0"+CCOMOperation.Key_ENTER);//设置短信发送方式,0为pdu形式,1为文本形式

                TestCom.SendCommand("at+cmgs=" + MessageLen + CCOMOperation.Key_ENTER);//设定消息长度,这个直接取test.nLength即可,算法已经封装好

                TestCom.SendCommand(MessageContent + CCOMOperation.Key_CTRLZ);//发送短信内容,正常的话已经发出短信了

     

    这只是简单的例子而已,不过足以起到抛砖引玉的作用了,其中难免有遗漏或错误,各位看官海涵

    展开全文
  • 这是一个自己开发的Android 直接发送短信方法附上代码,Android 发短信功能,包括了对内容合法性的验证,发送完成弹出提示。自己开发的直接发送短信的方法:  private void sendSMS(String telNo,String smsStr,...
  • 我调用的是阿里的短信服务,如果是个人测试,可以不用办服务。 直接拿支付宝账号登录就可以 需要获取阿里的key的步骤 第一步:登录后进入控制台,先给自己的账号余额中充入2元(做测试足够了) 第二步:获取...

    我调用的是阿里的短信服务,如果是个人测试,可以不用办服务。

    直接拿支付宝账号登录就可以

    需要获取阿里的key的步骤

    第一步:登录后进入控制台,先给自己的账号余额中充入2元(做测试足够了)

    xx

     第二步:获取AccessKey

    点击右上方自己的头像,然后点击accesskeys获取

    xx

    第三步:获取短信服务的一些配置

    在自己的控制台中点击,找到短信服务

    xx

    然后创建模板和签名(创建签名时要注意不能有自己的名字和公司名)

    xx

    然后就完成了,接下来就是代码部分

    我的项目结构

    xx

    短信功能所需的依赖

    <!-- 阿里云短信服务所需依赖 -->
    	<dependency>
    	    <groupId>org.apache.logging.log4j</groupId>
    	    <artifactId>log4j-core</artifactId>
    	    <version>2.8.2</version>
    	</dependency>
        <dependency>
    		<groupId>com.alibaba</groupId>
    		<artifactId>fastjson</artifactId>
    		<version>1.2.58</version>
    	</dependency>
        
        <dependency>
              <groupId>com.aliyun</groupId>
              <artifactId>aliyun-java-sdk-core</artifactId>
              <version>4.1.1</version>
          </dependency>
          <dependency>
              <groupId>com.aliyun</groupId>
              <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
              <version>1.1.0</version>
          </dependency>

    第一步:在sms包中新建一个类,配置短信功能需要的一些参数

    package com.ywy.sms;
    	
    /**
     * 手机验证部分配置ShortMessage 
     */
    public class TestSMS {
    	// 设置超时时间-可自行调整
        public final static String defaultConnectTimeout  = "sun.net.client.defaultConnectTimeout";
        public final static String defaultReadTimeout = "sun.net.client.defaultReadTimeout";
        public final static String Timeout = "10000";
        // 初始化ascClient需要的几个参数
        public final static String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
        public final static String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
        // 替换成AK (产品密)
        public final static String accessKeyId = "xxxxxxxxxxxx";//自己的key
        public final static String accessKeySecret = "xxxxxxxxxxx";//自己的keySecret
        // 必填:短信签名-可在短信控制台中找到
        public final static String SignName = "xxxxxx";  // 阿里云配置自己的短信签名填入
        // 必填:短信模板-可在短信控制台中找到
        public final static String TemplateCode= "xxxxxxx";
    }
    

    第二步:短信功能实现的代码(这里写完后就可以测试了,我这里是通过main方法测试,如果是action,页面上传手机号码,然后调用方法是一样的)

    package com.ywy.util;
    
    import javax.sound.midi.ShortMessage;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
    import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.ywy.sms.TestSMS;
    
    public class ShortMessageUtil {
    	private static String code ;
    
    	
    
    	public static void main(String[] args) {
            String tel = "185xxxxxxxxx";  //输入手机号
            String str=getVerificationCode(tel);//可以判断了
        }
    	/**
         * 获取短信验证码
         * @param tel
         */
        public static String getVerificationCode(String tel) {
            String vcode = vcode();
        	String templateParam = "{\"code\":"+vcode+"}";
             String result = ShortMessageUtil.getPhoneMsg(tel,TestSMS.TemplateCode,templateParam);
             if (result != null && result.equals("OK")){
                 // 请求成功
                 System.out.println("获取验证码成功!!!");
             }else{
            	 vcode="";
                 System.out.println("获取验证码失败"+result);
             }
             return vcode;
        }
    	/**
    
    	 * 阿里云短信服务配置
    	 * @param mobile
    	 * @return
    	 */
    	public static String getPhoneMsg(String mobile, String templateCode, String templateParam) {
    		/**
    		 * 进行正则关系校验
    		 */
    		System.out.println(mobile);
    
    		if (mobile == null || mobile == "") {
    			System.out.println("手机号为空");
    			return "";
    		}
    		/**
    		 * 短信验证---阿里大于工具
    		 */
    		
    		// 设置超时时间-可自行调整
            System.setProperty(TestSMS.defaultConnectTimeout, TestSMS.Timeout);
            System.setProperty(TestSMS.defaultReadTimeout, TestSMS.Timeout);
            // 初始化ascClient需要的几个参数
            final String product = TestSMS.product;// 短信API产品名称(短信产品名固定,无需修改)
            final String domain = TestSMS.domain;// 短信API产品域名(接口地址固定,无需修改)
            // 替换成你的AK
            final String accessKeyId = TestSMS.accessKeyId;// 你的accessKeyId,参考本文档步骤2
            final String accessKeySecret = TestSMS.accessKeySecret;// 你的accessKeySecret,参考本文档步骤2
            // 初始化ascClient,暂时不支持多region
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
                    accessKeyId, accessKeySecret);
            try {
                DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
                        domain);
            } catch (ClientException e1) {
                e1.printStackTrace();
            }
    
            IAcsClient acsClient = new DefaultAcsClient(profile);
            // 组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            // 使用post提交
            request.setMethod(MethodType.POST);
            // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
            request.setPhoneNumbers(mobile);
            // 必填:短信签名-可在短信控制台中找到
            request.setSignName(TestSMS.SignName);
            // 必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(templateCode);
            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${code},您的验证码为${code}"时,此处的值为
            // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
            //request.setTemplateParam("{ \"code\":\""+code+"\"}");
            request.setTemplateParam(templateParam);
            // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            //request.setOutId("yourOutId");
            // 请求失败这里会抛ClientException异常
            SendSmsResponse sendSmsResponse;
                try {
    				sendSmsResponse = acsClient.getAcsResponse(request);
    				if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
    	                // 请求成功
    	                return sendSmsResponse.getCode();
    	            } else {
    	                //请求失败,返回错误信息描述
    	              return sendSmsResponse.getMessage();
    	            }
    			} catch (ServerException e) {
    				e.printStackTrace();
    			} catch (ClientException e) {
    				e.printStackTrace();
    			}
           
    		
                return "true";
    	}
    	
    	
    	
    	/**	 * 生成6位随机数验证码	 * @return	 */	
    	public static String vcode(){		
    		String vcode = "";        
    		for (int i = 0; i < 6; i++) {            
    			vcode = vcode + (int)(Math.random() * 9);       
    		}        
    		return vcode;	
    	}
    }
    

     

     

     

    展开全文
  • 很简单,仅需要三步,第二部代码直接复制,不需要修改,第三部中的用户名和密钥修改成自己的即可 <1>  首先需要导入三个jar包 <2> import java.io.IOException;import java.net.URL;import java.util...

     这个方法用的是中国网建SMS短信通相关依赖进行操作的~~

    很简单,仅需要三步,第二部代码直接复制,不需要修改,第三部中的用户名和密钥修改成自己的即可

    <1>

       首先需要导入三个jar包

    <2>

      
    import java.io.IOException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.apache.http.HttpEntity;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ssl.DefaultHostnameVerifier;
    import org.apache.http.conn.util.PublicSuffixMatcher;
    import org.apache.http.conn.util.PublicSuffixMatcherLoader;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;


    public class HttpClientUtil {
    private RequestConfig requestConfig = RequestConfig.custom()
    .setSocketTimeout(15000)
    .setConnectTimeout(15000)
    .setConnectionRequestTimeout(15000)
    .build();

    private static HttpClientUtil instance = null;
    private HttpClientUtil(){}
    public static HttpClientUtil getInstance(){
    if (instance == null) {
    instance = new HttpClientUtil();
    }
    return instance;
    }

    /**
    * 发送 post请求
    * @param httpUrl 地址
    */
    public String sendHttpPost(String httpUrl) {
    HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
    return sendHttpPost(httpPost,"utf-8");
    }


    /**
    * 发送 post请求
    * @param httpUrl 地址
    * @param maps 参数
    * @param type 字符编码格式
    */
    public String sendHttpPost(String httpUrl, Map<String, String> maps,String type) {
    HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
    // 创建参数队列
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    for (String key : maps.keySet()) {
    nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));
    }
    try {
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, type));
    } catch (Exception e) {
    e.printStackTrace();
    }
    return sendHttpPost(httpPost,type);
    }

    /**
    * 发送Post请求
    * @param httpPost
    * @return
    */
    private String sendHttpPost(HttpPost httpPost,String reponseType) {
    CloseableHttpClient httpClient = null;
    CloseableHttpResponse response = null;
    HttpEntity entity = null;
    String responseContent = null;
    try {
    // 创建默认的httpClient实例.
    httpClient = HttpClients.createDefault();
    httpPost.setConfig(requestConfig);
    // 执行请求
    response = httpClient.execute(httpPost);
    entity = response.getEntity();
    responseContent = EntityUtils.toString(entity, reponseType);
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    // 关闭连接,释放资源
    if (response != null) {
    response.close();
    }
    if (httpClient != null) {
    httpClient.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return responseContent;
    }

    /**
    * 发送 get请求
    * @param httpUrl
    */
    public String sendHttpGet(String httpUrl) {
    HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求
    return sendHttpGet(httpGet);
    }

    /**
    * 发送 get请求Https
    * @param httpUrl
    */
    public String sendHttpsGet(String httpUrl) {
    HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求
    return sendHttpsGet(httpGet);
    }

    /**
    * @Title: sendMsgUtf8
    * @Description: TODO(发送utf8)
    * @param: @param Uid
    * @param: @param Key
    * @param: @param content
    * @param: @param mobiles
    * @param: @return
    * @date: 2017-3-22 下午5:58:07
    * @throws
    */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public int sendMsgUtf8(String Uid,String Key,String content,String mobiles){
    Map maps = new HashMap();
    maps.put("Uid", Uid);
    maps.put("Key", Key);
    maps.put("smsMob", mobiles);
    maps.put("smsText", content);
    String result = sendHttpPost("http://utf8.sms.webchinese.cn", maps, "utf-8");
    return Integer.parseInt(result);
    }

    /**
    * @Title: sendMsgUtf8
    * @Description: TODO(发送utf8)
    * @param: @param Uid
    * @param: @param Key
    * @param: @param content
    * @param: @param mobiles
    * @param: @return
    * @return: int
    * @author: ly
    * @date: 2017-3-22 下午5:58:07
    * @throws
    */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public int sendMsgGbk(String Uid,String Key,String content,String mobiles){
    Map maps = new HashMap();
    maps.put("Uid", Uid);
    maps.put("Key", Key);
    maps.put("smsMob", mobiles);
    maps.put("smsText", content);
    String result = sendHttpPost("http://gbk.sms.webchinese.cn", maps, "gbk");
    return Integer.parseInt(result);
    }

    /**
    * 发送Get请求
    * @param httpPost
    * @return
    */
    private String sendHttpGet(HttpGet httpGet) {
    CloseableHttpClient httpClient = null;
    CloseableHttpResponse response = null;
    HttpEntity entity = null;
    String responseContent = null;
    try {
    // 创建默认的httpClient实例.
    httpClient = HttpClients.createDefault();
    httpGet.setConfig(requestConfig);
    // 执行请求
    response = httpClient.execute(httpGet);
    entity = response.getEntity();
    responseContent = EntityUtils.toString(entity, "UTF-8");
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    // 关闭连接,释放资源
    if (response != null) {
    response.close();
    }
    if (httpClient != null) {
    httpClient.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return responseContent;
    }

    /**
    * 发送Get请求Https
    * @param httpPost
    * @return
    */
    private String sendHttpsGet(HttpGet httpGet) {
    CloseableHttpClient httpClient = null;
    CloseableHttpResponse response = null;
    HttpEntity entity = null;
    String responseContent = null;
    try {
    // 创建默认的httpClient实例.
    PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new URL(httpGet.getURI().toString()));
    DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);
    httpClient = HttpClients.custom().setSSLHostnameVerifier(hostnameVerifier).build();
    httpGet.setConfig(requestConfig);
    // 执行请求
    response = httpClient.execute(httpGet);
    entity = response.getEntity();
    responseContent = EntityUtils.toString(entity, "UTF-8");
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    // 关闭连接,释放资源
    if (response != null) {
    response.close();
    }
    if (httpClient != null) {
    httpClient.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return responseContent;
    }

    /**
    * @Title: getErrorMsg
    * @Description: TODO(返回异常原因)
    * @param: @param errorCode
    */
    public String getErrorMsg(int errorCode){
    if(errorCode==-1){
    return "没有该用户账户";
    }else if(errorCode==-2){
    return "接口密钥不正确";
    }else if(errorCode==-3){
    return "短信数量不足";
    }else if(errorCode==-4){
    return "手机号格式不正确";
    }else if(errorCode==-21){
    return "MD5接口密钥加密不正确";
    }else if(errorCode==-11){
    return "该用户被禁用";
    }else if(errorCode==-14){
    return "短信内容出现非法字符";
    }else if(errorCode==-41){
    return "手机号码为空";
    }else if(errorCode==-42){
    return "短信内容为空";
    }else if(errorCode==-51){
    return "短信签名格式不正确";
    }else if(errorCode==-6){
    return "IP限制";
    }else{
    return "未知错误码:"+errorCode;
    }
    }
    }

    <3>

    import java.util.HashMap;
    import java.util.Map;

    /**
    * @Title: http://www.smschinese.cn/api.shtml
    * @date 2011-3-22
    * @version V1.2
    */
    public class test {

    //用户名
    private static String Uid = "自己的用户名";

    //接口安全秘钥
    private static String Key = "自己的秘钥";

    //手机号码,多个号码如13800000000,13800000001,13800000002
    private static String smsMob = "15321362396,15764266860";

    //短信内容
    private static String smsText = "验证码:8888";


    public static void main(String[] args) {

    HttpClientUtil client = HttpClientUtil.getInstance();

    //UTF发送
    int result = client.sendMsgUtf8(Uid, Key, smsText, smsMob);
    if(result>0){
    System.out.println("UTF8成功发送条数=="+result);
    }else{
    System.out.println(client.getErrorMsg(result));
    }
    }
    }
    展开全文
  • 代码珍藏之发送短信

    2018-11-14 01:48:00
    Java中实现短信发送 最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下. 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带...

    Java中实现短信发送

     

    最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下.

    采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作流程如下。

    网建的链接如下:

    http://www.smschinese.cn/api.shtml

    手机号注册登陆成功之后页面如下:

    如上页面可以看到我们之前发送的短息信息以及相关的剩余短信条数.

    我们可以参考它那边提供的API接口文档,接入jar包,利用自己熟悉的编程语言进行开发,实现短信发送.

    短信接口文档页面如下所示:

    这里采用Java电泳接口的方式,如需要其它的调用方式,请点击链接:   http://www.smschinese.cn/api.shtml

    参数中需要的接口秘钥  key值 :在注册成功之后会自带一个.

     

     

    转载于:https://www.cnblogs.com/tjlr/p/9955851.html

    展开全文
  • 利用飞信开放的API,网络上有大牛写了php发送飞信的类库。这种方法前提是你自己得申请一个飞信号,记好自己飞信的密码,然后直接php调用php发飞信信息的类,就完成了!非常方便,但缺点是速度比较慢
  • 一、准备短信发送平台 首先进入http://user.ihuyi.com/nav/sms.html互亿天线,并且注册,进入首页 注册后会免费送50条消息 注册完后进入验证码通知短信,复制自己的api接口信息,apiid和apikey。并且保存 然后点击...
  • andriod短信整合备份发送到gmail邮箱,需要在andoid手机配置好gmail邮箱 github代码 https://github.com/zhwj184/smsbackup 查看效果: 可以把几天的短信打包发送自己的gmail邮箱,可以定时备份下短信。 主要代码...
  • 这个是实现短信在线发送的ASP代码 来源是一个客户要求 想在自己的企业网站上加上发短信的功能,客户一输上号码,就会把联系方式发到他的手机上。这是一个接口代码
  • 这个是实现 实现短信在线发送的C#代码 来源是一个客户要求 想在自己的企业网站上加上发短信的功能,客户一输上号码,就会把联系方式发到他的手机上。这是一个接口代码
  • Android kotlin 代码设置短信指定SIM卡发送前言逻辑权限获取全部手机卡信息修改短信使用的卡发送短信完事 前言 在双卡双待,甚至多卡多待的Android设备中,实现调用自己想要的那张卡发送短信; 逻辑 权限 首先需要...
  • 手机发送短信程序

    2011-05-14 21:14:00
    学了一会儿J2ME,感觉很简单,乘热打铁写了一个发送短信的小程序,还有几个问题没有解决(复制,粘贴, 从电话薄中导入联系人)。有兴趣的人可以自己写(查看一下手机厂商提供的API就能解决了)。下面是代码: 欢迎...
  • phonegap在android手机上实现短信发送

    热门讨论 2011-12-09 08:21:46
    phonegap实现调用android的手机短信发送 代码自己已经在真机测试实现 比较不错 顶
  • 使用J2ME发送手机短信

    千次阅读 2007-02-11 11:25:00
    小弟有一部索爱的K508C,在学习J2ME时,发觉它竟是MIDP2.0,因此,就利用它来开始自己的移动开发之旅。 首先,要加入以下这两句必须的库引用:import javax.wireless.messaging.MessageConnection;import javax....
  • 这个是实现 来源是一个客户要求 想在自己的企业网站上加上发短信的功能,客户一输上号码,就会把联系方式发到他的手机上。这是一个接口代码
  • 使用WMA发送手机短信的详细说明 本文详细介绍如何使用WMA使J2ME程序实现发送手机短信功能。 使用WMA可以在J2ME程序非常容易的实现发送手机短信功能。网上有许多类似的文章介绍过,但没有给出实例,使不少没有相关...
  • 阿里云使用消息服务,发送注册码给手机。测试几次发现手机都接收不到,后台也没报错!今天我提交自己的工单,售后工程师已经帮我解决了,非常感谢他!官方代码:...
  • 最近在用Java实现发送邮件,发送手机短信,手机验证码的功能,已经基本实现了,所以在这里总结一下。 首先,用Java实现这两个功能并不是特别困难,因为各大云服务已经提供的现有的API,我们自己调用即可。 对应Java...
  • 第一行代码-8.2 接收和发送短信

    千次阅读 2016-02-23 10:18:51
    接收和发送短信也是通过调用Android提供的API实现的,所以我们自己也可以实现短信应用。 1、接收短信  当手机接收到一条信息的时候,系统会发送一条名为android.provider.Telephony.SMS_RECEIVED的广播,这条广播...
  • 市面上短信平台非常多,当初我刚接手这个项目的时候,技术群里的大神介绍给我阿里大于的平台,但是我接入了几次,发现还是接入还是比较困难,试了一个下午的...好了话不多说,现在分享起代码 首先是生成验证码的Ran...
  • 我们这里采用阿里大于的短信API ... a、在阿里大于上创建自己的应用 b、点击配置管理中的验证码,先添加签名,再配置...第四步:代码测试短信是否成功 第五步:Java Application 运行 最终结果:如下图为成...
  • 一般在你下载的短信SDK包里会有限制每个手机号每天发送短信的次数,这个是在后端代码里进行限制,防止从你这个接口出现盗刷情况。 首先建表,字符集根据自己情况修改 CREATE TABLE `h_sms_num` (  `id` int(10) ...
  • 下面是自己写的一个发送验证码给手机之后,进入的一个倒计时的效果 js代码,我可是连<script type="text/javascript">这种都贴出来啦! <script type="text/javascript"> var InterValObj; ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 274
精华内容 109
关键字:

手机自己发送代码短信