最近在做用戶登陸注冊模塊的時候用到了采用第三方短信接口發送短信驗證碼,查詢了一些網站和參考了一些別人的方法,用的是網建短信通的,也可以阿里云平臺的或者別的平臺的。
首先還是登陸注冊用戶信息,然后進入這個網站的首頁之后我們先進入修改短信密鑰拿到自己的安全密鑰,然后進入上面的短信API接口頁面
可以看到他們官方給出了一個演示demo
import JAVA.io.UnsupportedEncodingException;
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://gbk.api.smschinese.cn");
post.addRequestHeader("Content-Type","
Application/x-www-form-urlencoded;charset=gbk");//在頭文件中設置轉碼
NameValuePair[] data ={ new NameValuePair("Uid", "本站用戶名"),new NameValuePair("Key", "接口安全秘鑰"),new NameValuePair("smsMob","手機號碼"),new NameValuePair("smsText","驗證碼:8888")};
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();
}
}
代碼還是很容易就能看懂的,我們只需要改的是
NameValuePair[] data ={ new NameValuePair("Uid", "本站用戶名"),new NameValuePair("Key", "接口安全秘鑰"),new NameValuePair("smsMob","手機號碼"),new NameValuePair("smsText","驗證碼:8888")};
1
可以看到這個Uid就是剛剛我們注冊的用戶名,key是剛剛獲取到的密鑰,smsMob就是要發送信息的手機號了,smsText就是要發送的信息。
所以把上面的演示demo稍微修改一下就可以直接使用了:
public static HashMap<String,String> getMessageStatus(String phone)throws Exception
{
HashMap<String,String> map=new HashMap<String,String>();
String code=VerifyingCode();
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("
http://gbk.api.smschinese.cn");//該第三方短信服務地址
post.addRequestHeader("Content-Type",
"
application/x-www-form-urlencoded;charset=gbk");//在頭文件中設置轉碼
NameValuePair[] data = {
new NameValuePair("Uid", "*****"),
new NameValuePair("Key", "*********"),
new NameValuePair("smsMob",phone),
new NameValuePair("smsText","您的驗證碼是"+code+",有效時間為10分鐘,請盡快驗證。")
};
map.put("code",code);
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); //打印返回消息狀態,1表示發送成功,其他的小于0的為失敗
map.put("result", result);
post.releaseConnection();
return map;
}
//生成六位隨機數
public static String VerifyingCode()
{
Random random=new Random();
String code="";
for (int i=0;i<6;i++)
{
code+=random.nextInt(10);
}
System.out.println(code);
return code;
}
我的想法就是定義一個hashmap將生成的驗證碼與發送的狀態放在map里面,那么在service層上進行業務處理的時候就可以直接拿到我們剛剛發送的驗證碼進行業務處理。
最后還需要導入官方給的三個jar包,依賴如下
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>