253短信

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.text.MessageFormat;

public class SmsUtil {

    private static Logger logger = LoggerFactory.getLogger(SmsUtil.class);

    public static final int smsFlag =1;  //1:发送短信    0:不发送短信
    private static final String smsUrl = "http: //sms.253.com/msg/send";
    private static final String user = "******";  
    private static final String pwd = "******";

    /**
     * 发送短信验证码
     *
     * @param phoneNum
     * @return
     */
    public static JSONObject sendSmsCode(HttpServletRequest request, String phoneNum) {
        if(StringUtils.isEmpty(phoneNum)){
            logger.error(String.format("发送短信失败,手机号:%s",phoneNum));
        }
        String verifyCode = RandomSeriUtil.genRandoms();
        String smsTxt = String.format(Constants.SMSMODEL_VERIFYSMSCODE, verifyCode);
        try {
            String url = new StringBuffer(smsUrl).append("?un={0}&pw={1}&phone={2}&msg={3}&rd=1").toString();
        /*try {
            URLEncoder.encode(RandomSeriUtil.formatStr(smsContent, RandomSeriUtil.genRandoms()), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }*/

            String urlParam = MessageFormat.format(url, user, pwd, phoneNum, smsTxt);
            if (smsFlag == 1) {
                String smsResp = HttpTool.httpGetRequest(urlParam);
                if (smsResp.contains(String.valueOf(ConstVar.ZERO))) {
                    SessionUtil.setAttr(request, Constants.SMSCODE_KEY, verifyCode + Constants.GLOBAL_DEFAULT_FENFGEFU + System.currentTimeMillis() + Constants.GLOBAL_DEFAULT_FENFGEFU + phoneNum);
                    return RespMsg.SUCCESS();
                }
            } else {
                logger.info("接收手机:" + phoneNum + "验证码内容:" + smsTxt);
                SessionUtil.setAttr(request, Constants.SMSCODE_KEY, verifyCode + Constants.GLOBAL_DEFAULT_FENFGEFU + System.currentTimeMillis() + Constants.GLOBAL_DEFAULT_FENFGEFU + phoneNum);
                return RespMsg.SUCCESS();
            }
        } catch (Exception e) {
            logger.error(String.format("发送短信失败,手机号:%s******短信内容:%s",phoneNum,smsTxt));
            e.printStackTrace();
        }
        return RespMsg.FAIL("获取验证码错误");
    }

    /**
     * 发送短信
     *
     * @param phoneNum
     * @return
     */
    public static JSONObject sendSmsMessage(String phoneNum,String message) {
        try {
            String url = new StringBuffer(smsUrl).append("?un={0}&pw={1}&phone={2}&msg={3}&rd=1").toString();
            String urlParam = MessageFormat.format(url, user, pwd, phoneNum, message);
            if (smsFlag == 1) {
                String smsResp = HttpTool.httpGetRequest(urlParam);
                if (smsResp.contains(String.valueOf(ConstVar.ZERO))) {
                    return RespMsg.SUCCESS();
                }
            } else {
                logger.info("接收手机:" + phoneNum + "验证码内容:" + message);
                return RespMsg.SUCCESS();
            }
        } catch (Exception e) {
            logger.error(String.format("发送短信失败,手机号:%s******短信内容:%s",phoneNum,message));
        }
        return RespMsg.FAIL("发送短信消息错误");
    }

    /**
     * 校验验证码
     *
     * @param request
     * @param verifyCode
     * @return
     */
    public static boolean verifySmsCode(HttpServletRequest request, String verifyCode,String phoneNum) {
        String codeStr = (String) SessionUtil.getAttrs(request, Constants.SMSCODE_KEY);
        //未发送验证码
        if (StringUtils.isEmpty(codeStr) || StringUtils.isEmpty(verifyCode) || StringUtils.isEmpty(phoneNum)) {
            return false;
        }
        try{
            String localCode = codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[0];
            long timeSpan = Long.valueOf(codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[1]);
            String phone = codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[2];
            int diff = (int) (System.currentTimeMillis() - timeSpan) / (1000 * 60);
            //验证码过期,删除本地缓存
            if (diff >= Constants.SMS_CODE_EFFECTIVE_TIME) {
                SessionUtil.removeCacheInfo(request, Constants.SMSCODE_KEY);
                return false;
            }
            if (!verifyCode.equals(localCode) || !phoneNum.equals(phone)) {
                return false;
            }
            //验证通过,删除本地缓存
            SessionUtil.removeCacheInfo(request, Constants.SMSCODE_KEY);
            return true;
        }catch (Exception e){
            logger.error(e.getMessage());
            return false;
        }

    }


    /**
     * 注册码发送频率验证
     *
     * @param request
     * @return
     */
    public static boolean verifyFrequency(HttpServletRequest request) {
        String codeStr = (String) SessionUtil.getAttrs(request, Constants.SMSCODE_KEY);
        //未发送验证码
        if (StringUtils.isEmpty(codeStr)) {
            return true;
        }
        long timeSpan = Long.valueOf(codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[1]);
        int diff = (int) (System.currentTimeMillis() - timeSpan) / (1000 * 60);
        //距上次申请时间超过1分钟
        if (diff >= 1) {
            return true;
        }
        return false;
    }


    public static void main(String[] args) {
        sendSmsMessage("******","*********");
    }


}

1、注册253短信账号,购买服务,获取api地址、账号和密码

2、绑定发送短信的ip、白名单

猜你喜欢

转载自blog.csdn.net/u013045878/article/details/81103503