1. 程式人生 > >網站登入密碼忘記後,通過向手機發送驗證碼實現找回密碼的實現方法

網站登入密碼忘記後,通過向手機發送驗證碼實現找回密碼的實現方法

今天我想了一天如何實現網站使用者在忘記了密碼後,如何通過向手機發送驗證碼來重新設定密碼。驗證碼的驗證以及生成都已經做好了,現在主要是解決如何向用戶手機發送簡訊。顯然這需要一個第三方提供的簡訊介面,來幫助我們實現向用戶手機發送驗證碼簡訊。這裡有一個非常好的第三方藉口。連線地址: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 運營商返回失敗程式碼