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!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。