package com.cku.sms;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

import com.cku.util.DateUtils;
import com.cku.util.MD5Generator;

public class ZtSmsCode {

	public static String sendNote(String content, String mobile) {
		String sendParam = buildSendParam(mobile, content, TYPE_YX);
		return StringUtils.isBlank(sendParam) ? null : getUrl(sendParam);
	}
	
	/**
	 * @Description： 发送营销类短信
	 * @author: yuanshuai
	 * @date: 2018/1/19 11:29
	 */
	public static String sendNoteYX(String content, String mobile) {
		String sendParam = buildSendParam(mobile, content, TYPE_YX);
		return StringUtils.isBlank(sendParam) ? null : getUrl(sendParam);
	}

	private static final String sendUrl = "http://www.api.zthysms.com/sendSms.do";
	private static final String usernameHY = "cabhy";
	private static final String passwordHY = "k7dAfa";
	private static final String usernameYX = "cabyx";
	private static final String passwordYX = "803Sta";
	private static final String xh = "";

	private static final int TYPE_HY = 1;
	private static final int TYPE_YX = 2;
	
	public static String getUrl(String param) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		try {
			URL realUrl = new URL(sendUrl);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			// 设置通用的请求属性
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 发送POST请求必须设置如下两行
			conn.setDoOutput(true);
			conn.setDoInput(true);
			//设置相应请求时间
			conn.setConnectTimeout(30000);
			//设置读取超时时间
			conn.setReadTimeout(30000);
			// 获取URLConnection对象对应的输出流
			out = new PrintWriter(conn.getOutputStream());
			// 发送请求参数
			out.print(param);
			// flush输出流的缓冲
			out.flush();
			// 定义BufferedReader输入流来读取URL的响应
			in = new BufferedReader(
					new InputStreamReader(conn.getInputStream(),"utf-8"));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			e.printStackTrace();
//			System.out.println(e);
//			return "发送 POST 请求出现异常！";
		}
		//使用finally块来关闭输出流、输入流
		finally{
			try{
				if(out!=null){
					out.close();
				}
				if(in!=null){
					in.close();
				}
			}
			catch(IOException ex){
				ex.printStackTrace();
			}
		}
		return result;
	}
	
	/**
	 * @Description： 根据手机号和内容构建发送的url
	 * @author: yuanshuai
	 * @date: 2017/12/13 17:01
	 */
	private static String buildSendParam(String mobile, String content, int type) {
		String param = null;
		try {
			String tkey = DateUtils.formatDate(new Date(), "yyyyMMddHHmmss");
			switch (type) {
			case TYPE_HY:
				param = "url=" + sendUrl + "&username=" + usernameHY + "&password=" + MD5Generator.generate(MD5Generator.generate(passwordHY) + tkey)
						+ "&tkey=" + tkey + "&mobile=" + mobile + "&content=" + URLEncoder.encode(content, "UTF-8") + "&xh=" + xh;
				break;
			case TYPE_YX:
				param = "url=" + sendUrl + "&username=" + usernameYX + "&password=" + MD5Generator.generate(MD5Generator.generate(passwordYX) + tkey)
						+ "&tkey=" + tkey + "&mobile=" + mobile + "&content=" + URLEncoder.encode(content, "UTF-8") + "&xh=" + xh;
				break;
		}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return param;
	}
	
}
