作者:不如藏拙_487 | 来源:互联网 | 2023-09-05 15:01
公司需要使用向指定手机发送验证码的功能,在网上搜了一下,有使用’短信猫’的,有使用WebService的,有使用第三方的,我使用的是中国网建提供的API来实现;
中国网建注册送五条短信和三条彩信做测试,这就足够了,今天公司刚买了几千条做测试!
首先是编码的选择:
GBK编码发送接口地址:
http://gbk.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888
UTF-8编码发送接口地址:
http://utf8.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888
参数详解如下表
我用的是UTF-8,官网提供了一个demo示例,用的httpclient是3.x,但我要用4.3.3,跟公司项目相匹配,
public String SendSecurityCode(String tel, String code) throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClientBuilder.create().build()HttpPost post = new HttpPost("http://utf8.sms.webchinese.cn")post.addHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8")List formparams = new ArrayList()formparams.add(new BasicNameValuePair("Uid", "公司名"))formparams.add(new BasicNameValuePair("Key", "短信密钥"))formparams.add(new BasicNameValuePair("smsMob",tel))formparams.add(new BasicNameValuePair("smsText","欢迎成为APP用户,验证码:" + code))try {post.setEntity(new UrlEncodedFormEntity(formparams,"utf-8"))} catch (Exception e1) {e1.printStackTrace()}CloseableHttpResponse response = client.execute(post)int statusCode = response.getStatusLine().getStatusCode()System.out.println("statusCode:"+statusCode)Header[] headers = response.getAllHeaders()for(Header h : headers){System.out.println(h.toString())}String result = EntityUtils.toString(response.getEntity())System.out.println("----"+result)post.releaseConnection()client.close()return result}
一定要注意编码,因为如果编码不统一,导致乱码,会被拦截下来,导致短信发送不出去,上午就卡在这一块。
注意代码中的result,返回的是结果码,如下表格
![这里写图片描述](https://img-blog.csdn.net/20150720185748390)
有几点要注意,一个是短信密钥,一个是短信签名!
分别在“修改短信密钥”和“用户信息修改”,这两个是必填的,不然短信会发不出去,或者被拦截!
到此,将代码跑起来,等待手机的短信吧!
(具体的可以去中国网建官网进行查看和咨询客服。。。不是做广告的。。。。)