MessageCodeUtil.java 5.28 KB
package com.rnt.utils;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.TreeMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;

import open189.sign.ParamsSign;

/**
 * 电信天翼短信验证码发送工具类.<br/>
 * 
 * Copyright: Copyright (c) 2017  zteits
 * 
 * @ClassName: MessageCodeUtil.java
 * @Description: 
 * @version: v1.0.0
 * @author: wangfs
 * @date: 2017年6月5日   下午2:12:42 
 * Modification History:
 * Date             Author          Version            Description
 *---------------------------------------------------------*
 * 2017年6月5日      wangfs           v1.0.0               创建
 */
public class MessageCodeUtil {

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

    /**应用ID app_id.*/
    private static String app_id = "484862610000244722";
    
    /**密钥.*/
    private static String app_secret = "753fee09d4714b317adafd42ca7b4f82";
    
    /**回调接口.*/
    private static String receivedUrl = "http://61.177.139.228:18976/codeReceive";
    
    /**发送令牌地址 ACCESS_TOKEN_URL.*/
    private static String ACCESS_TOKEN_URL = "https://oauth.api.189.cn/emp/oauth2/v3/access_token";
    
    /**
     * 发送短信验证码.<br/>
     * @param userPhone
     * @param code 验证码.<br/>
     * @return
     * @throws Exception
     */
    public static String sendSms(String userPhone,String randcode) throws Exception {
        //获取令牌access_token
        String access_token=getAccessToken();
        logger.debug("获取到的令牌access_token ======"+access_token);

        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String timestamp = dateFormat.format(date);
        System.err.println(timestamp);
        TreeMap<String, String> paramsMap = new TreeMap<String, String>();
        paramsMap.put("app_id", app_id);
        paramsMap.put("access_token", access_token);
        paramsMap.put("timestamp", timestamp);

        //获取信任码token
        String token=getToken(access_token,timestamp,paramsMap);

        TreeMap<String, String> paramsMap1 = new TreeMap<String, String>();
        paramsMap1.put("app_id", app_id);
        paramsMap1.put("access_token", access_token);
        paramsMap1.put("timestamp", timestamp);
        paramsMap1.put("token", token);
        paramsMap1.put("url", receivedUrl);
        paramsMap1.put("phone", userPhone);
        paramsMap1.put("randcode", randcode);
        paramsMap1.put("exp_time", "5");
        //String postUrl = "http://api.189.cn/v2/dm/randcode/send";
        String postUrl = "http://api.189.cn/v2/dm/randcode/sendSms";
        String postEntity = "app_id="+ app_id 
        		            + "&access_token=" + access_token 
        		            + "&timestamp=" + timestamp
        		            +"&token=" + token
        		            +"&randcode="+randcode
                            + "&phone=" + userPhone
                            + "&url=" + receivedUrl
                            + "&exp_time=" + "5"
                            + "&sign="+ParamsSign.value(paramsMap1, app_secret);
        String resJson = HttpInvokerUtil.httpPost(postUrl,null,postEntity);
        return resJson;
    }
    

    /**
     * 获取短信发送令牌
     * @return
     */
    private static String getAccessToken(){
        String postEntity = "app_id=" + app_id
                +"&app_secret="+app_secret  + "&grant_type=client_credentials&state=0&scope=";
        String result= "";
        String access_token="";
        try {
            result = HttpInvokerUtil.httpPost(ACCESS_TOKEN_URL,null,postEntity);
            access_token=JSONObject.parseObject(result).getString("access_token");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return access_token;
    }

    /**
     * 获取短信发送信任码
     * @return
     */
    private static String getToken(String access_token,String timestamp,TreeMap<String, String> paramsMap){
        String getUrl = "http://api.189.cn/v2/dm/randcode/token?app_id=" + app_id
                + "&access_token=" + access_token + "&timestamp="+timestamp + "&sign="+ ParamsSign.value(paramsMap, app_secret);
        String resJson = "";
        String token="";
        try {
            resJson = HttpInvokerUtil.httpGet(getUrl,null);
            token=JSONObject.parseObject(resJson).getString("token");
            logger.debug("获取到的信任码token ======"+token);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return token;
    }

    /**
     * 生成6位验证码.<br/>
     * @return
     */
    public static String createCode() {
        //int code=(int)(Math.random()*9000+100000);
        
        Random random = new Random();
    	String code = random.nextInt(1000000)+1000000+"";
        return code.substring(1);
    }
    
    
    public static void main(String[] args) {
    	String randcode=String.valueOf((int)(Math.random()*9000+100000));
    	System.out.println("验证码="+randcode);
        try {
            System.out.println(sendSms("18633483823",randcode));
        } catch (Exception e) {
            e.printStackTrace();
        }
    	
    	
    }

}