问题?Java调用短信验证码,ASP、C#、Delphi、JSP、PHP、VB6也可以调用短信验证码
最近在做短信验证码的功能,在网上查找了半天,发现好多都是copy去copy来的,都看烦,到最后,直接去短信开发商那里,找了一个WebService的接口调用,就可以了。其实很多的短信验证码都是通过中介短信服务商来做的。
我用的这个是属于一个叫亿互无线的短信服务商,每天有几条短信测试。
官网:http://www.ihuyi.com/product.php
资源包下载:点击下载链接
导包:基础包,只要是短信WebService几乎都用到前面三个包。
调用代码:
package com.itcast.note;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.itcast.util.StringUtil;
public class NoteTest2 {
private static String Url = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
//该例子是成功的,使用的是http://www.ihuyi.com/product.php,该亿互无线网站的接口
public static void main(String[] args) {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(Url);
// client.getParams().setContentCharset("GBK");
client.getParams().setContentCharset("UTF-8");
method.setRequestHeader("ContentType",
"application/x-www-form-urlencoded;charset=UTF-8");
int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);
System.out.println("验证码:"+mobile_code);
// System.out.println(mobile);
String content = new String("您的验证码是:" + mobile_code + "。请不要把验证码泄露给其他人。");
NameValuePair[] data = {// 提交短信
new NameValuePair("account", "用户名"),//去官网注册的一下即可
new NameValuePair("password", "密码"), // 密码可以使用明文密码或使用32位MD5加密
// new NameValuePair("password",
// util.StringUtil.MD5Encode("密码")),
new NameValuePair("mobile", "电话号码"),
new NameValuePair("content", content), };
method.setRequestBody(data);
try {
client.executeMethod(method);
String SubmitResult = method.getResponseBodyAsString();
// System.out.println(SubmitResult);
Document doc = DocumentHelper.parseText(SubmitResult);
Element root = doc.getRootElement();
String code = root.elementText("code");
String msg = root.elementText("msg");
String smsid = root.elementText("smsid");
System.out.println(code);
System.out.println(msg);
System.out.println(smsid);
if ("2".equals(code)) {
System.out.println("短信提交成功");
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
MD5加密工具类:这个官方写的,用来向官网接口服务商发送用户密码加密的。可以用 明文,也可以用 密文
package com.itcast.util;
import java.security.MessageDigest;
public class StringUtil {
public static String str;
public static final String EMPTY_STRING = "";
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* 转换字节数组为16进制字串
* @param b 字节数组
* @return 16进制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
} catch (Exception ex) {
}
return resultString;
}
}
就要一个简单的调用WebService接口就可以实现。剩下的就是做网页扩展啊,把验证码放到session或者application域对象中,当提交表单数据的时候,取出来验证即可。有啥不懂的,可以Call Me