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;
/**
* 电信天翼短信验证码发送工具类.
*
* 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";
/**
* 发送短信验证码.
* @param userPhone
* @param code 验证码.
* @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 paramsMap = new TreeMap();
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 paramsMap1 = new TreeMap();
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
+ "×tamp=" + 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 paramsMap){
String getUrl = "http://api.189.cn/v2/dm/randcode/token?app_id=" + app_id
+ "&access_token=" + access_token + "×tamp="+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位验证码.
* @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();
}
}
}