Send SMS codes Springboot

In line to see this information, to record it.

Original URL: https://www.cnblogs.com/wangchl/p/9759331.html

Foreword

SMS codes is sent through the phone codes to one kind of valid verification code system. The main identity and the legitimacy of the sensitive operation of the user's mobile phone is used to verify authentication.

There are many third-party message delivery platform, each platform has its own advantages and disadvantages, you can decide according to their specific situation at the time of selection. This article describes Springboot integrated SMS text messages.

ready

  1. user registration. Baidu through SMS text messages, enter the official page registered account; official website: http://sms.webchinese.cn/

  

  2. Log obtain the necessary information

  

  Important information under 3. Record 

   Accounts, passwords, SMS key. (Coding necessary)   

        Bound phone, email. (Account security)

coding

Setting up an springboot project.

2. Add dependence.

复制代码
<dependencies>
   <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
   </dependency>
   <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.4</version>
   </dependency>
   <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.0.1</version>
   </dependency>
</dependencies>                        
复制代码

3.编写工具类。

复制代码
package com.wcl.test.utils;

import java.util.Random;

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 org.junit.Test;

public class SendMessageUtil {
    private static final String SMS_Url = "http://sms.webchinese.cn/web_api/";

    /**
     * @param Uid SMS用户id  : lvfang123
     * @param Key 接口秘钥:SMS登录可查(非登录密码)
     * @param sendPhoneNum 短信发送目标号码
     * @param desc 短信内容
     * @return Integer(1:成功码,其他失败,具体参见注释)
     */
    public static Integer send(String Uid,String Key,String sendPhoneNum,String desc){

        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(SMS_Url);
        post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");// 在头文件中设置转码

        //设置参数
        NameValuePair[] data = {
                new NameValuePair("Uid", Uid),
                new NameValuePair("Key", Key),//秘钥
                new NameValuePair("smsMob", sendPhoneNum),
                new NameValuePair("smsText", desc)
        };

        post.setRequestBody(data);

        try {
            client.executeMethod(post);
        } catch (Exception e) {  e.printStackTrace();  }


        Header[] headers = post.getResponseHeaders();
        int statusCode = post.getStatusCode();
        System.out.println("statusCode:" + statusCode);
        for (Header h : headers) {
            System.out.println(h.toString());
        }

        String result ="";
        try {
            result = new String(post.getResponseBodyAsString().getBytes("gbk"));
        } catch (Exception e) {  e.printStackTrace();  }

        post.releaseConnection();

        return Integer.parseInt(result);
    }
    /**
     *  -1  没有该用户账户
     -2 接口密钥不正确 [查看密钥]不是账户登陆密码
     -21    MD5接口密钥加密不正确
     -3 短信数量不足
     -11    该用户被禁用
     -14    短信内容出现非法字符
     -4 手机号格式不正确
     -41    手机号码为空
     -42    短信内容为空
     -51    短信签名格式不正确接口签名格式为:【签名内容】
     -6 IP限制
     大于0    短信发送数量
     以上作为补充
     */
    public static String getMessage(Integer code){
        String message;
        if(code > 0 ) {
            message = "SMS-f发送成功!短信量还有" + code + "条";
        }else if(code == -1){
            message = "SMS-没有该用户账户";
        }else if(code == -2){
            message = "SMS-接口密钥不正确";
        }else if(code == -21){
            message = "SMS-MD5接口密钥加密不正确";
        }else if(code == -3){
            message = "SMS-短信数量不足";
        }else if(code == -11){
            message = "SMS-该用户被禁用";
        }else if(code == -14){
            message = "SMS-短信内容出现非法字符";
        }else if(code == -4){
            message = "SMS-手机号格式不正确";
        }else if(code == -41){
            message = "SMS-手机号码为空";
        }else if(code == -42){
            message = "SMS-短信内容为空";
        }else if(code == -51){
            message = "SMS-短信签名格式不正确接口签名格式为:【签名内容】";
        }else if(code == -6){
            message = "SMS-IP限制";
        }else{
            message = "其他错误";
        }
        return message;
    }

    /**
     * 随机生成6位验证码
     * @return
     */
    public static String getRandomCode(Integer code){
        Random random = new Random();
        StringBuffer result= new StringBuffer();
        for (int i=0;i<code;i++){
            result.append(random.nextInt(10));
        }
        return result.toString();
    }
    @Test
    public void testSendMessage(){
        //SendMessageUtil.send("SMS账户","接口秘钥","目标号码","发送内容");
        Integer resultCode = SendMessageUtil.send("疾风***","d41d8cd98f**********","159********","验证码:"+getRandomCode(6)); 
System.out.println(SendMessageUtil.getMessage(resultCode));
  }
}
复制代码

4.测试。

//SendMessageUtil.send("SMS账户","接口秘钥","目标号码","发送内容");
使用junit测试,正确填写send方法的参数。无论成功失败都会返回响码,根据响应码判断是否成功,如果失败也可查出失败原因。

Guess you like

Origin www.cnblogs.com/linwenbin/p/11345284.html