package smsmoduyun.v2.yun; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.net.HttpURLConnection; import java.net.URL; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.Random; public class SmsSenderUtil { protected Random random = new Random(); public String stringMD5(String input) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); byte[] inputByteArray = input.getBytes(); messageDigest.update(inputByteArray); byte[] resultByteArray = messageDigest.digest(); return byteArrayToHex(resultByteArray); } protected String strToHash(String str) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] inputByteArray = str.getBytes(); messageDigest.update(inputByteArray); byte[] resultByteArray = messageDigest.digest(); return byteArrayToHex(resultByteArray); } public String byteArrayToHex(byte[] byteArray) { char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] resultCharArray = new char[byteArray.length * 2]; int index = 0; for (byte b : byteArray) { resultCharArray[index++] = hexDigits[b >>> 4 & 0xf]; resultCharArray[index++] = hexDigits[b & 0xf]; } return new String(resultCharArray); } public int getRandom() { return random.nextInt(999999) % 900000 + 100000; } public HttpURLConnection getPostHttpConn(String url) throws Exception { URL object = new URL(url); HttpURLConnection conn; conn = (HttpURLConnection) object.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); conn.setRequestMethod("POST"); return conn; } public String calculateSig(String accesskey, long random, String msg, long curTime, ArrayList phoneNumbers) throws NoSuchAlgorithmException { String phoneNumbersString = phoneNumbers.get(0); for (int i = 1; i < phoneNumbers.size(); i++) { phoneNumbersString += "," + phoneNumbers.get(i); } return strToHash(String.format("accesskey=%s&random=%d&time=%d&mobile=%s", accesskey, random, curTime, phoneNumbersString)); } public String calculateSigForTempl(String accesskey, long random, long curTime, ArrayList phoneNumbers) throws NoSuchAlgorithmException { String phoneNumbersString = phoneNumbers.get(0); for (int i = 1; i < phoneNumbers.size(); i++) { phoneNumbersString += "," + phoneNumbers.get(i); } return strToHash(String.format("accesskey=%s&random=%d&time=%d&mobile=%s", accesskey, random, curTime, phoneNumbersString)); } public String calculateSigForTempl(String accesskey, long random, long curTime, String phoneNumber) throws NoSuchAlgorithmException { ArrayList phoneNumbers = new ArrayList<>(); phoneNumbers.add(phoneNumber); return calculateSigForTempl(accesskey, random, curTime, phoneNumbers); } public JSONArray phoneNumbersToJSONArray(String nationCode, ArrayList phoneNumbers) { JSONArray tel = new JSONArray(); int i = 0; do { JSONObject telElement = new JSONObject(); telElement.put("nationcode", nationCode); telElement.put("mobile", phoneNumbers.get(i)); tel.add(telElement); } while (++i < phoneNumbers.size()); return tel; } public JSONArray smsParamsToJSONArray(List params) { JSONArray smsParams = new JSONArray(); for (int i = 0; i < params.size(); i++) { smsParams.add(params.get(i)); } return smsParams; } public SmsSingleSenderResult jsonToSmsSingleSenderResult(JSONObject json) { SmsSingleSenderResult result = new SmsSingleSenderResult(); result.result = json.getIntValue("result"); result.errMsg = json.getString("errmsg"); if (0 == result.result) { result.ext = json.getString("ext"); result.sid = json.getString("sid"); } return result; } public SmsVoiceVerifyCodeSenderResult jsonToSmsSingleVoiceSenderResult(JSONObject json) { SmsVoiceVerifyCodeSenderResult result = new SmsVoiceVerifyCodeSenderResult(); result.result = json.getIntValue("result"); if (false == json.getBoolean("errmsg")) { result.errmsg = json.getString("errmsg"); } if (0 == result.result) { result.ext = json.getString("ext"); result.callid = json.getString("callid"); } return result; } public static void main(String[] args) { System.out.println(String.format("account=%s&ts=%s&secret=%s", "ch003r", "20201027145540", "42vpr4p7cv")); } }