今天我想了一天如何實現網站用戶在忘記了密碼后,如何通過向手機發送驗證碼來重新設置密碼。驗證碼的驗證以及生成都已經做好了,現在主要是解決如何向用戶手機發送短信。顯然這需要一個第三方提供的短信接口,來幫助我們實現向用戶手機發送驗證碼短信。這里有一個非常好的第三方借口。連接地址: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="18782962370";
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 | 運營商返回失敗代碼 | ||
