今天我想了一天如何实现网站用户在忘记了密码后,如何通过向手机发送验证码来重新设置密码。验证码的验证以及生成都已经做好了,现在主要是解决如何向用户手机发送短信。显然这需要一个第三方提供的短信接口,来帮助我们实现向用户手机发送验证码短信。这里有一个非常好的第三方借口。连接地址:http://www.xhsms.com/jiekou.aspx。他提供了一个很好的短信接口,简单易用。下面是我自己参考写的一段测试代码:
package com.im;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
public class SmsBase {
private Integer x_eid = 0;//会员企业ID号,个人用户为0
private String x_uid = "yourname";//会员账号
private String x_pwd_md5 = "e10adc3949ba59abbe56e057f20f883e";//登陆密码的MD5值32位
private Integer x_gate_id = 300;//发送短信时通道ID,通道发送失败可以切换其它通道,无该值系统使用默认通道
public String SendSms(String mobile, String content) throws UnsupportedEncodingException{
Integer x_ac = 10;//发送信息
HttpURLConnection httpconn = null;
String x_memo = content.trim();//发送短信内容
StringBuilder sb = new StringBuilder();
sb.append("http://gateway.woxp.cn:6630/utf8/web_api/?x_eid=");
sb.append(x_eid);
sb.append("&x_uid=").append(x_uid);
sb.append("&x_pwd_md5=").append(x_pwd_md5);
sb.append("&x_ac=").append(x_ac);
sb.append("&x_gate_id=").append(x_gate_id);
sb.append("&x_target_no=").append(mobile);
sb.append("&x_memo=").append(URLEncoder.encode(x_memo, "utf-8"));
String result = "-20";
System.out.println(sb.toString());
try {
URL url = new URL(sb.toString());
httpconn = (HttpURLConnection) url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(httpconn.getInputStream()));
result = rd.readLine();
rd.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(httpconn != null){
httpconn.disconnect();
httpconn = null;
}
}
return result;
}
public static void main(String[] args) {
String mobile="00000000000";
String content="Hello";
try {
String result = new SmsBase().SendSms(mobile, content);
System.out.println(result);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
网页中参数详细列表 | |||
编号 | 参数名称 | 参数说明 | 是否必须 |
1 | x_eid | 会员企业ID号,个人用户为0 | 是 |
2 | x_uid | 会员账号 | 是 |
3 | x_pwd_md5 | 登陆密码的MD5值 | 是 |
4 | x_new_pwd | 修改密码时需要此参数。代表要变更的新密码 | 否 |
5 | x_sub_id | 扩展子号码,发送短信时需要,根据通道是否支持子号码扩展而提供 | 否 |
6 | x_target_no | 接受者号码,多个号码用“,”分开 | 否 |
7 | x_memo | 短信发送内容.长度请参考通道说明(必须使用URL编码) | 否 |
8 | x_send_time | 定时短信,格式YYYY-MM-DD HH:MM:SS,24小时制.值为空或无该参数代表立即发送 | 否 |
9 | x_gate_id | 发送短信时通道ID,通道发送失败可以切换其它通道,无该值系统使用默认通道 | 否 |
10 | x_ac | 本此提交的行为。比如是发送短信。查询余额,参数值如下 | 是 |
参数x_ac(提交动作)值 | ||||
编号 | 值 | 说明 | ||
1 | 10 | 发送短信。返回失败或成功 | ||
2 | 12 | 长短信发送,最多支持450字符发送.64字每条计费.(请使用POST方式提交参数) | ||
3 | 20 | 查询上行短信,分主动(客户自已获取)和被动(我们推送到指定地址)两种方式 1.被动接收客户.需要提交接收上行短信的URL地址(POST+XML)方式内容utf-8编码 2.主动接收短信,直接调用AC=20即可. 被动接收提示: .NET文件调用.需要在头设置ValidateRequest="false"参数.否则返回HTTP 500服务器内部错误 | ||
4 | 30 | 查询当前户剩余条数 | ||
5 | 40 | 获取指定通道的关键字屏蔽字符串,发送前先过滤关键字再提交 |
参数x_ac=10发送短信时。返回值 | ||||
编号 | 值 | 说明 | ||
1 | 大于0 | 发送成功,此次发送成功条数 | ||
2 | -1 | 参数无效 | ||
3 | -2 | 通道不存在或者当前业务不支持此通道 | ||
4 | -3 | 定时格式错误 | ||
5 | -4 | 接收号码无效 | ||
6 | -5 | 提交号码个数超过上限,每个通道都有批量提交的上限.详细值请参考通道说明 | ||
7 | -6 | 发送短信内容长度不符合要求,参考通道要求长度 | ||
8 | -7 | 当前账户余额不足 | ||
9 | -8 | 网关发送短信时出现异常 | ||
10 | -9 | 用户或者密码没输入 | ||
11 | -10 | 企业ID或者会员账号不存在 | ||
12 | -11 | 密码错误 | ||
13 | -12 | 账户锁定 | ||
14 | -13 | 网关状态关闭 | ||
15 | -14 | 验证用户时执行异常 | ||
16 | -15 | 网关初始化失败 | ||
17 | -16 | 当前IP已被系统屏蔽,可能是与您设置的接入IP不同或者是失败次数太多 | ||
18 | -17 | 发送异常 | ||
19 | -18 | 账号未审核 | ||
20 | -19 | 当前时间不允许此通道工作,主要对群发通道限制 | ||
21 | -20 | 传输密钥未设置,请登陆平台设置 | ||
22 | -21 | 提取密钥异常 | ||
23 | -22 | 签名验证失败 | ||
24 | -23 | 发现屏蔽关键字 | ||
25 | -100到-199 | 运营商返回失败代码 |