JAVA 는 제3자 플랫폼 을 이용 하여 문자 인증 코드 를 발송 합 니 다.

6545 단어 자바인증번호
얼마 전에 자신 이 만 든 작은 프로젝트 에서 문자 인증 코드 로 로그 인,등록 하 는 문제 와 관련 되 었 습 니 다.예전 에 이런 부분 과 관련 된 적 이 없 었 습 니 다.다른 사람의 블 로 그 를 보면 알 듯 모 르 는 것 같 습 니 다.지금 은 자신 이 만 든 제3자 문자 플랫폼 을 이용 하여 인증 코드 를 보 내 는 기능 을 기록 합 니 다.
본 고 는 등록 을 예 로 들 어 SpringMVC+Spring+Mybatis 프레임 워 크 를 바탕 으로 이 문자 인증 코드 기능 을 완성 했다.
문자 인증 코드 를 보 내 는 원 리 는 무 작위 로 6 자리 숫자 를 생 성하 여 이 6 자리 숫자 를 session 에 저장 하고 클 라 이언 트 는 sessionid 를 통 해 대응 하 는 session 을 판단 하 며 사용자 가 입력 한 인증 코드 를 session 기록 의 인증 코드 와 비교 하 는 것 이다.
광고 혐의 를 막 기 위해 서 는 문자 플랫폼 이 어디 인지 말 하지 않 겠 습 니 다.
일반적인 제3자 문자 플랫폼 은 모두 자신 들 의 문자 인 터 페 이 스 를 가지 고 그들의 인 터 페 이 스 를 조금 만 읽 으 면 자신의 수 요 를 만족 시 킬 수 있다.
먼저 문자 플랫폼 인터페이스 코드 를 보 여 줍 니 다.여 기 는 jar 가방 세 개commons-logging-1.1.1.jar,commons-httpclient-3.1.jar,commons-codec-1.4.jar를 다운로드 해 야 합 니 다.

import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {
public static void main(String[] args)throws Exception
{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //          
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//         
NameValuePair[] data ={ new NameValuePair("Uid", "     "),new NameValuePair("Key", "      "),new NameValuePair("smsMob","    "),new NameValuePair("smsText","   :8888")};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk")); 
System.out.println(result); //        
post.releaseConnection();
}
}
우리 가 보 내 고 싶 은 메 시 지 는 이 줄 코드 안에 있 습 니 다.NameValuePair[]data={new NameValuePair("Uid","본 사이트 사용자 이름"),new NameValuePair("Key","인터페이스 보안 키"),new NameValuePair("smsMob","핸드폰 번호"),new NameValuePair("smsText","인증 코드:8888")};
이 인터페이스 에는 또 하나의 result 메시지 가 있 는데 그 역할 은 사용자 에 게 문자 메시지 가 보 낸 상 태 를 알려 주 는 것 이다.1 은 발송 성공 을 나타 내 고 다른 0 보다 작은 것 은 실패 이다.여기 서 1 이 성공 이라는 것 만 알 면 된다.
우리 의 실제 작업 에서 인증 코드 는 반드시 우리 스스로 생 성 해 야 한다.result 정 보 를 인증 코드 와 함께 얻 으 면 HashMap 으로 집합 할 생각 을 하기 쉽다.다음은 프로젝트 자체 의 요구 로 인터페이스 에 대한 변경 입 니 다.

import java.util.HashMap;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import com.yuetile.utils.VerifyingCodeGenerator;
public class SendMsg_webchineseController {
public static HashMap<String,String> getMessageStatus(String phone)throws Exception{
HashMap<String,String> m=new HashMap<String,String>();
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); 
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//         
String code=VerifyingCodeGenerator.generate();//   
NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","         ,      :"+code+""+"     5  ")};
m.put("code", code);
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk")); 
System.out.println(result); //        
m.put("result", result);
post.releaseConnection();
return m;
}
}
***는 제3자 플랫폼 에 등 록 된 계 정 비밀 번 호 를 나 타 냅 니 다.
ACTION 층:

/**
* @author hang 
* @Decription   ,       ,   Session 
* @param         POST 
* @return       
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = UrlDefine.Register.CHECKMESSAGEWORK, method = RequestMethod.POST)
public Object SendCheckMessage(HttpServletRequest request, @RequestBody UserBean u)
throws Exception {
String message = "    ";
String phone=u.getTelephone(); //            
UserBean user = userService.getByPhone(phone);
if (user != null) {
message = "        ";
return new Response(Status.ERROR, message);
} else {
HashMap<String, String> m = SendMsg_webchineseController.getMessageStatus(phone); //        
String result = m.get("result");  //   result 
if (result.trim().equals("1")) {  //   1,      
String code = m.get("code");  //          
logger.info("      :"+code); //    
HttpSession session = request.getSession(); //  session
session.setAttribute("code", code);  //        session   
session.setMaxInactiveInterval(60 * 5);//          5  
return new Response(Status.SUCCESS, message);
} else {
message = "      ";
return new Response(Status.ERROR, message);
}
}
}
그럼 발송 성공 입 니 다.
테스트:
POStman 을 이용 하여 로 컬 에서 테스트 하기:

결과:

여기 로 발송 성공.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기