Java实现短信验证码和国际短信群发功能的示例
最近由于公司的业务拓展,需要给国外用户发送国际短信,像西班牙、葡萄牙、意大利这些国家都要发,还有中国的香港、澳门、台湾(港澳台)这些地区也要发,不过现在已经有许多公司提供国际短信的业务了,之前使用过云片的验证码业务,顺便看到他们也有国际短信的业务,并且更重要的是,不需要修改任何代码,只要添加下国际短信模板,就可以直接使用之前的代码继续发送国际短信,简直太方便了。
废话不多说,直接上代码。
/**
*Createdbybingoneon15/12/16.
*/
importorg.apache.http.HttpEntity;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.util.EntityUtils;
importjava.io.IOException;
importjava.net.URISyntaxException;
importjava.net.URLEncoder;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
/**
*短信http接口的java代码调用示例
*基于ApacheHttpClient4.3
*
*@authorsongchao
*@since2015-04-03
*/
publicclassJavaSmsApi{
//查账户信息的http地址
privatestaticStringURI_GET_USER_INFO="https://sms.yunpian.com/v2/user/get.json";
//智能匹配模板发送接口的http地址
privatestaticStringURI_SEND_SMS="https://sms.yunpian.com/v2/sms/single_send.json";
//模板发送接口的http地址
privatestaticStringURI_TPL_SEND_SMS="https://sms.yunpian.com/v2/sms/tpl_single_send.json";
//发送语音验证码接口的http地址
privatestaticStringURI_SEND_VOICE="https://voice.yunpian.com/v2/voice/send.json";
//绑定主叫、被叫关系的接口http地址
privatestaticStringURI_SEND_BIND="https://call.yunpian.com/v2/call/bind.json";
//解绑主叫、被叫关系的接口http地址
privatestaticStringURI_SEND_UNBIND="https://call.yunpian.com/v2/call/unbind.json";
//编码格式。发送编码格式统一用UTF-8
privatestaticStringENCODING="UTF-8";
publicstaticvoidmain(String[]args)throwsIOException,URISyntaxException{
//修改为您的apikey.apikey可在官网(http://www.yunpian.com)登录后获取
Stringapikey="xxxxxxxxxxxxxxxxxxxxx";
//修改为您要发送的手机号
Stringmobile="130xxxxxxxx";
/****************查账户信息调用示例*****************/
System.out.println(JavaSmsApi.getUserInfo(apikey));
/****************使用智能匹配模板接口发短信(推荐)*****************/
//设置您要发送的内容(内容必须和某个模板匹配。以下例子匹配的是系统提供的1号模板)
Stringtext="【云片网】您的验证码是1234";
//发短信调用示例
//System.out.println(JavaSmsApi.sendSms(apikey,text,mobile));
/****************使用指定模板接口发短信(不推荐,建议使用智能匹配模板接口)*****************/
//设置模板ID,如使用1号模板:【#company#】您的验证码是#code#
longtpl_id=1;
//设置对应的模板变量值
Stringtpl_value=URLEncoder.encode("#code#",ENCODING)+"="
+URLEncoder.encode("1234",ENCODING)+"&"
+URLEncoder.encode("#company#",ENCODING)+"="
+URLEncoder.encode("云片网",ENCODING);
//模板发送的调用示例
System.out.println(tpl_value);
System.out.println(JavaSmsApi.tplSendSms(apikey,tpl_id,tpl_value,mobile));
/****************使用接口发语音验证码*****************/
Stringcode="1234";
//System.out.println(JavaSmsApi.sendVoice(apikey,mobile,code));
/****************使用接口绑定主被叫号码*****************/
Stringfrom="+86130xxxxxxxx";
Stringto="+86131xxxxxxxx";
Integerduration=30*60;//绑定30分钟
//System.out.println(JavaSmsApi.bindCall(apikey,from,to,duration));
/****************使用接口解绑主被叫号码*****************/
//System.out.println(JavaSmsApi.unbindCall(apikey,from,to));
}
/**
*取账户信息
*
*@returnjson格式字符串
*@throwsjava.io.IOException
*/
publicstaticStringgetUserInfo(Stringapikey)throwsIOException,URISyntaxException{
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
returnpost(URI_GET_USER_INFO,params);
}
/**
*智能匹配模板接口发短信
*
*@paramapikeyapikey
*@paramtext短信内容
*@parammobile接受的手机号
*@returnjson格式字符串
*@throwsIOException
*/
publicstaticStringsendSms(Stringapikey,Stringtext,Stringmobile)throwsIOException{
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
params.put("text",text);
params.put("mobile",mobile);
returnpost(URI_SEND_SMS,params);
}
/**
*通过模板发送短信(不推荐)
*
*@paramapikeyapikey
*@paramtpl_id模板id
*@paramtpl_value模板变量值
*@parammobile接受的手机号
*@returnjson格式字符串
*@throwsIOException
*/
publicstaticStringtplSendSms(Stringapikey,longtpl_id,Stringtpl_value,Stringmobile)throwsIOException{
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
params.put("tpl_id",String.valueOf(tpl_id));
params.put("tpl_value",tpl_value);
params.put("mobile",mobile);
returnpost(URI_TPL_SEND_SMS,params);
}
/**
*通过接口发送语音验证码
*@paramapikeyapikey
*@parammobile接收的手机号
*@paramcode验证码
*@return
*/
publicstaticStringsendVoice(Stringapikey,Stringmobile,Stringcode){
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
params.put("mobile",mobile);
params.put("code",code);
returnpost(URI_SEND_VOICE,params);
}
/**
*通过接口绑定主被叫号码
*@paramapikeyapikey
*@paramfrom主叫
*@paramto被叫
*@paramduration有效时长,单位:秒
*@return
*/
publicstaticStringbindCall(Stringapikey,Stringfrom,Stringto,Integerduration){
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
params.put("from",from);
params.put("to",to);
params.put("duration",String.valueOf(duration));
returnpost(URI_SEND_BIND,params);
}
/**
*通过接口解绑绑定主被叫号码
*@paramapikeyapikey
*@paramfrom主叫
*@paramto被叫
*@return
*/
publicstaticStringunbindCall(Stringapikey,Stringfrom,Stringto){
Map<String,String>params=newHashMap<String,String>();
params.put("apikey",apikey);
params.put("from",from);
params.put("to",to);
returnpost(URI_SEND_UNBIND,params);
}
/**
*基于HttpClient4.3的通用POST方法
*
*@paramurl提交的URL
*@paramparamsMap提交<参数,值>Map
*@return提交响应
*/
publicstaticStringpost(Stringurl,Map<String,String>paramsMap){
CloseableHttpClientclient=HttpClients.createDefault();
StringresponseText="";
CloseableHttpResponseresponse=null;
try{
HttpPostmethod=newHttpPost(url);
if(paramsMap!=null){
List<NameValuePair>paramList=newArrayList<NameValuePair>();
for(Map.Entry<String,String>param:paramsMap.entrySet()){
NameValuePairpair=newBasicNameValuePair(param.getKey(),param.getValue());
paramList.add(pair);
}
method.setEntity(newUrlEncodedFormEntity(paramList,ENCODING));
}
response=client.execute(method);
HttpEntityentity=response.getEntity();
if(entity!=null){
responseText=EntityUtils.toString(entity,ENCODING);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
response.close();
}catch(Exceptione){
e.printStackTrace();
}
}
returnresponseText;
}
}
代码看上去有点乱了,不过我们用到的API接口也就那么几个,具体的可以看这篇文章如何使用云片API发送短信验证码,只要把那三个接口搞定了,无论是国际短信、国内短信还是短信验证码、手机验证码,都可以轻松搞定,soeasy!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。