接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下。大体上说的都是有三种方法,分别是sina提供的webservice接口、短信mao和中国网建提供的SMS短信平台。
这三种方式,因为第一种和第三种都经过了别的平台转发,因此具有一定的安全隐患,第二种短信mao的方式相对可能要安全一些。
但是短信mao需要购买硬件设备,因此我便只好参考网上的文章先实现了用sms平台发送短信的功能。
这个功能说起来实际上很简单,java代码也很少,只是我在实现的过程中参照网上文章的代码和注释并没有马上成功发送短信。
好在在几经周折后终于成功,于是我发现原文的注释实际上和真正的操作不太一样,我便记录了下来,以便更多人参考。
参考文章地址:http://blog.csdn.net/csh624366188/article/details/7183457
这段代码如下:
package com.text; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class SendMsg_webchinese { public static void main(String[] args) throws Exception { HttpClient client = new HttpClient(); PostMethod post = new PostMethod("http://sms.webchinese.cn/web_api/"); post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=gbk");// 在头文件中设置转码 NameValuePair[] data = { new NameValuePair("Uid", "cshxxxxxxxx"), // 注册的用户名 new NameValuePair("Key", "53295058d1c46710666a"), // 注册成功后,登录网站使用的密钥 new NameValuePair("smsMob", "187xxxxxxx"), // 手机号码 new NameValuePair("smsText", "以后给我老实点哈。。。。听话。。。") };//设置短信内容 post.setRequestBody(data); client.executeMethod(post); Header[] headers = post.getResponseHeaders(); int statusCode = post.getStatusCode(); System.out.println("statusCode:" + statusCode); for (Header h : headers) { System.out.println(h.toString()); } String result = new String(post.getResponseBodyAsString().getBytes( "gbk")); System.out.println(result); post.releaseConnection(); }
需要说明的是“注册成功后,登录网站使用的密钥”这里,我按照文中注释把Uid后的内容改成自己注册的用户名,把smsMob后的内容换成了自己的手机号,然后也把key后的内容换成了自己登陆中国网建( http://sms.webchinese.cn/Login.shtml)的登陆密码,但是结果一运行程序,返回值是-2,也没有收到短信。
根据文中的说明可以知道-2是密码错误,于是我又试了一下登陆,密码并没有错误。没办法,我只好在中国网建登陆后的页面一一查看,后来才发现原来有一个专门发送短信接口的密钥,把key后的内容换成这个之后再一运行程序,返回值变成了-51,还是不成功,不过证明密码已经正确了。
-51说明短信签名有问题,于是我又跑到中国网建一看,原来签名那里我没有填,如下图填好签名,再次运行程序,返回值变成了1,代表成功发送一条数据。
而得到返回值1之后,我手机也成功收到了短信,网站注册时送的5条免费短信也变成了剩余4条。如下图: