first commit
This commit is contained in:
35
comm/Smsmoduyun/src/smsmoduyun/v1/SmsSDKDemoV1.java
Executable file
35
comm/Smsmoduyun/src/smsmoduyun/v1/SmsSDKDemoV1.java
Executable file
@@ -0,0 +1,35 @@
|
||||
package smsmoduyun.v1;
|
||||
|
||||
import smsmoduyun.v1.yun.SmsSingleSender;
|
||||
import smsmoduyun.v1.yun.SmsSingleSenderResult;
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
*/
|
||||
public class SmsSDKDemoV1 {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 请根据实际 accesskey 和 secretkey 进行开发,以下只作为演示 sdk 使用
|
||||
// 请根据实际 accesskey 和 secretkey 进行开发,以下只作为演示 sdk 使用
|
||||
String accesskey = "xxx";
|
||||
String secretkey = "xxxxx";
|
||||
// 手机号码
|
||||
String phoneNumber = "xxxxxxx";
|
||||
int type = 0;
|
||||
// 初始化单发
|
||||
SmsSingleSender singleSender = new SmsSingleSender(accesskey, secretkey);
|
||||
SmsSingleSenderResult singleSenderResult;
|
||||
String rangdom = "xxxxxxxxxx"; // 你的随机数
|
||||
String msg = "【xxx】680956是您的验证码,2分钟内有效。(请勿向任何人泄露您收到的验证码)";
|
||||
|
||||
int a = 0;
|
||||
// 普通单发,注意前面必须为【】符号包含,置于头或者尾部。
|
||||
singleSenderResult = singleSender.send(type, "86", phoneNumber, msg, "", "");
|
||||
System.out.println(singleSenderResult);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
75
comm/Smsmoduyun/src/smsmoduyun/v1/SmsTemplateDemoV1.java
Executable file
75
comm/Smsmoduyun/src/smsmoduyun/v1/SmsTemplateDemoV1.java
Executable file
@@ -0,0 +1,75 @@
|
||||
package smsmoduyun.v1;
|
||||
|
||||
import smsmoduyun.v1.yun.SmsTemplateSender;
|
||||
|
||||
/**
|
||||
* 短信模板 添加短信模板,修改短信模板,查询短信模板
|
||||
*/
|
||||
public class SmsTemplateDemoV1 {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 请根据实际 accesskey 和 secretkey 进行开发,以下只作为演示 sdk 使用
|
||||
String accesskey = "xxx";
|
||||
String secretkey = "xxx";
|
||||
|
||||
// 添加短信模板
|
||||
saveTemplate(accesskey, secretkey);
|
||||
|
||||
// 更新短信模板
|
||||
// updateTemplate(accesskey,secretkey);
|
||||
|
||||
// 查新短信模板
|
||||
findTemplate(accesskey, secretkey);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
//// 添加短信模板
|
||||
public static void saveTemplate(String accesskey, String secretkey) {
|
||||
try {
|
||||
String url = "https://live.mordula.com/sms/v1/saveTemplate";
|
||||
String content = "测试模板";
|
||||
// 短信模板
|
||||
SmsTemplateSender templdateSender = new SmsTemplateSender(accesskey, secretkey);
|
||||
String respResult = templdateSender.saveSmsTemplate(url, content);
|
||||
System.out.println(respResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//// 修改短信模板
|
||||
public static void updateTemplate(String accesskey, String secretkey) {
|
||||
try {
|
||||
String url = "https://live.mordula.com/sms/v1/updateTemplate";
|
||||
String content = "测试模板2";
|
||||
String templateId = "xxx";
|
||||
// 短信模板
|
||||
SmsTemplateSender templdateSender = new SmsTemplateSender(accesskey, secretkey);
|
||||
String respResult = templdateSender.updateSmsTemplate(url, templateId, content);
|
||||
System.out.println(respResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//// 查询短信模板
|
||||
public static void findTemplate(String accesskey, String secretkey) {
|
||||
try {
|
||||
String url = "https://live.mordula.com/sms/v1/findTemplate";
|
||||
String templateId = "xxx";
|
||||
// 短信模板
|
||||
SmsTemplateSender templdateSender = new SmsTemplateSender(accesskey, secretkey);
|
||||
String respResult = templdateSender.findSmsTemplate(url, templateId);
|
||||
System.out.println(respResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
136
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSenderUtil.java
Executable file
136
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSenderUtil.java
Executable file
@@ -0,0 +1,136 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
//import org.json.JSONArray;
|
||||
//import org.json.JSONObject;
|
||||
|
||||
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<String> 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<String> 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<String> phoneNumbers = new ArrayList<>();
|
||||
phoneNumbers.add(phoneNumber);
|
||||
return calculateSigForTempl(accesskey, random, curTime, phoneNumbers);
|
||||
}
|
||||
|
||||
// public JSONArray phoneNumbersToJSONArray(String nationCode, ArrayList<String> phoneNumbers) {
|
||||
// JSONArray tel = new JSONArray();
|
||||
// int i = 0;
|
||||
// do {
|
||||
// JSONObject telElement = new JSONObject();
|
||||
// telElement.put("nationcode", nationCode);
|
||||
// telElement.put("mobile", phoneNumbers.get(i));
|
||||
// tel.put(telElement);
|
||||
// } while (++i < phoneNumbers.size());
|
||||
//
|
||||
// return tel;
|
||||
// }
|
||||
//
|
||||
// public JSONArray smsParamsToJSONArray(ArrayList<String> params) {
|
||||
// JSONArray smsParams = new JSONArray();
|
||||
// for (int i = 0; i < params.size(); i++) {
|
||||
// smsParams.put(params.get(i));
|
||||
// }
|
||||
// return smsParams;
|
||||
// }
|
||||
//
|
||||
// public SmsSingleSenderResult jsonToSmsSingleSenderResult(JSONObject json) {
|
||||
// SmsSingleSenderResult result = new SmsSingleSenderResult();
|
||||
//
|
||||
// result.result = json.getInt("result");
|
||||
// result.errMsg = json.getString("errmsg");
|
||||
// if (0 == result.result) {
|
||||
// result.ext = json.getString("ext");
|
||||
// result.sid = json.getString("sid");
|
||||
// result.fee = json.getInt("fee");
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// public SmsVoiceVerifyCodeSenderResult jsonToSmsSingleVoiceSenderResult(JSONObject json) {
|
||||
// SmsVoiceVerifyCodeSenderResult result = new SmsVoiceVerifyCodeSenderResult();
|
||||
// result.result = json.getInt("result");
|
||||
// if (false == json.isNull("errmsg")) {
|
||||
// result.errmsg = json.getString("errmsg");
|
||||
// }
|
||||
// if (0 == result.result) {
|
||||
// result.ext = json.getString("ext");
|
||||
// result.callid = json.getString("callid");
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
|
||||
}
|
||||
213
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSingleSender.java
Executable file
213
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSingleSender.java
Executable file
@@ -0,0 +1,213 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.ArrayList;
|
||||
|
||||
//import org.json.JSONObject;
|
||||
|
||||
public class SmsSingleSender {
|
||||
String accesskey;
|
||||
String secretkey;
|
||||
// 同时支持http和https两种协议,具体根据自己实际情况使用。
|
||||
String url = "https://live.mordula.com/sms/v1/sendsinglesms";
|
||||
// String url = "http://127.0.0.1:8080/live.kewail.com/sms/v1/sendsinglesms";
|
||||
// String url =
|
||||
// "http://2p8773516g.qicp.vip:16416/live.kewail.com/sms/v1/sendsinglesms";
|
||||
// 30秒
|
||||
private static int TIMEOUT = 30 * 1000;
|
||||
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
|
||||
public SmsSingleSender(String accesskey, String secretkey) throws Exception {
|
||||
this.accesskey = accesskey;
|
||||
this.secretkey = secretkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通单发短信接口,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
|
||||
*
|
||||
* @param type 短信类型,0 为普通短信,1 营销短信
|
||||
* @param nationCode 国家码,如 86 为中国
|
||||
* @param phoneNumber 不带国家码的手机号
|
||||
* @param msg 信息内容,必须与申请的模板格式一致,否则将返回错误
|
||||
* @param extend 扩展码,可填空
|
||||
* @param ext 服务端原样返回的参数,可填空
|
||||
* @return {@link}SmsSingleSenderResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public SmsSingleSenderResult send(int type, String nationCode, String phoneNumber, String msg, String extend,
|
||||
String ext) throws Exception {
|
||||
/*
|
||||
* 请求包体 { "tel": { "nationcode": "86", "mobile": "13788888888" }, "type": 0,
|
||||
* "msg": "你的验证码是1234", "sig": "fdba654e05bc0d15796713a1a1a2318c", "time":
|
||||
* 1479888540, "extend": "", "ext": "" } 应答包体 { "result": 0, "errmsg": "OK",
|
||||
* "ext": "", "sid": "xxxxxxx", "fee": 1 }
|
||||
*/
|
||||
// 校验 type 类型
|
||||
if (0 != type && 1 != type) {
|
||||
throw new Exception("type " + type + " error");
|
||||
}
|
||||
if (null == extend) {
|
||||
extend = "";
|
||||
}
|
||||
if (null == ext) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// JSONObject tel = new JSONObject();
|
||||
// tel.put("nationcode", nationCode);
|
||||
// tel.put("mobile", phoneNumber);
|
||||
//
|
||||
// data.put("type", type);
|
||||
// data.put("msg", msg);
|
||||
// data.put("sig", util.strToHash(
|
||||
// String.format("secretkey=%s&random=%d&time=%d&mobile=%s", secretkey, random, curTime, phoneNumber)));
|
||||
// data.put("tel", tel);
|
||||
// data.put("time", curTime);
|
||||
// data.put("extend", extend);
|
||||
// data.put("ext", ext);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// conn.setConnectTimeout(TIMEOUT);
|
||||
// conn.setReadTimeout(TIMEOUT);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
//
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
// System.out.println(wholeUrl);
|
||||
// System.out.println(data.toString());
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// SmsSingleSenderResult result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
// System.out.println(sb.toString());
|
||||
// JSONObject json = new JSONObject(sb.toString());
|
||||
// result = util.jsonToSmsSingleSenderResult(json);
|
||||
// } else {
|
||||
// result = new SmsSingleSenderResult();
|
||||
// result.result = httpRspCode;
|
||||
// result.errMsg = "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定模板单发
|
||||
*
|
||||
* @param nationCode 国家码,如 86 为中国
|
||||
* @param phoneNumber 不带国家码的手机号
|
||||
* @param templId 信息内容
|
||||
* @param params 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数
|
||||
* @param sign 签名,如果填空,系统会使用默认签名
|
||||
* @param extend 扩展码,可填空
|
||||
* @param ext 服务端原样返回的参数,可填空
|
||||
* @return {@link}SmsSingleSenderResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public SmsSingleSenderResult sendWithParam(String nationCode, String phoneNumber, int templId,
|
||||
ArrayList<String> params, String sign, String extend, String ext) throws Exception {
|
||||
/*
|
||||
* 请求包体 { "tel": { "nationcode": "86", "mobile": "13788888888" }, "sign":
|
||||
* "Kewail云", "tpl_id": 19, "params": [ "验证码", "1234", "4" ], "sig":
|
||||
* "fdba654e05bc0d15796713a1a1a2318c", "time": 1479888540, "extend": "", "ext":
|
||||
* "" } 应答包体 { "result": 0, "errmsg": "OK", "ext": "", "sid": "xxxxxxx", "fee":
|
||||
* 1 }
|
||||
*/
|
||||
if (null == nationCode || 0 == nationCode.length()) {
|
||||
nationCode = "86";
|
||||
}
|
||||
if (null == params) {
|
||||
params = new ArrayList<>();
|
||||
}
|
||||
if (null == sign) {
|
||||
sign = "";
|
||||
}
|
||||
if (null == extend) {
|
||||
extend = "";
|
||||
}
|
||||
if (null == ext) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// JSONObject tel = new JSONObject();
|
||||
// tel.put("nationcode", nationCode);
|
||||
// tel.put("mobile", phoneNumber);
|
||||
//
|
||||
// data.put("tel", tel);
|
||||
// data.put("sig", util.calculateSigForTempl(secretkey, random, curTime, phoneNumber));
|
||||
// data.put("tpl_id", templId);
|
||||
// data.put("params", util.smsParamsToJSONArray(params));
|
||||
// data.put("sign", sign);
|
||||
// data.put("time", curTime);
|
||||
// data.put("extend", extend);
|
||||
// data.put("ext", ext);
|
||||
//
|
||||
// String wholeUrl = String.format("%s?accesskey=%d&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
// conn.setConnectTimeout(TIMEOUT);
|
||||
// conn.setReadTimeout(TIMEOUT);
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// SmsSingleSenderResult result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
// JSONObject json = new JSONObject(sb.toString());
|
||||
// result = util.jsonToSmsSingleSenderResult(json);
|
||||
// } else {
|
||||
// result = new SmsSingleSenderResult();
|
||||
// result.result = httpRspCode;
|
||||
// result.errMsg = "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
HttpURLConnection conn = util.getPostHttpConn("https://www.baidu.com");
|
||||
|
||||
conn.setConnectTimeout(TIMEOUT);
|
||||
conn.setReadTimeout(TIMEOUT);
|
||||
|
||||
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
wr.write("");
|
||||
wr.flush();
|
||||
}
|
||||
}
|
||||
17
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSingleSenderResult.java
Executable file
17
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsSingleSenderResult.java
Executable file
@@ -0,0 +1,17 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
public class SmsSingleSenderResult {
|
||||
/*
|
||||
* { "result": 0, "errmsg": "OK", "ext": "", "sid": "xxxxxxx", "fee": 1 }
|
||||
*/
|
||||
public int result;
|
||||
public String errMsg = "";
|
||||
public String ext = "";
|
||||
public String sid = "";
|
||||
public int fee;
|
||||
|
||||
public String toString() {
|
||||
return String.format("SmsSingleSenderResult\nresult %d\nerrMsg %s\next %s\nsid %s\nfee %d", result, errMsg, ext,
|
||||
sid, fee);
|
||||
}
|
||||
}
|
||||
155
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsTemplateSender.java
Executable file
155
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsTemplateSender.java
Executable file
@@ -0,0 +1,155 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
|
||||
//import org.json.JSONObject;
|
||||
|
||||
public class SmsTemplateSender {
|
||||
|
||||
String accesskey;
|
||||
String secretkey;
|
||||
// 同时支持http和https两种协议,具体根据自己实际情况使用。
|
||||
// String url = "https://live.kewail.com/sms/v1/sendsinglesms";
|
||||
// String url = "http://127.0.0.1:8080/live.kewail.com/sms/v1/sendsinglesms";
|
||||
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
|
||||
public SmsTemplateSender(String accesskey, String secretkey) throws Exception {
|
||||
this.accesskey = accesskey;
|
||||
this.secretkey = secretkey;
|
||||
}
|
||||
|
||||
public String saveSmsTemplate(String url, String content) throws Exception {
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// data.put("sig", util.strToHash(String.format("secretkey=%s&random=%d&time=%d", secretkey, random, curTime)));
|
||||
// data.put("content", content);
|
||||
// data.put("time", curTime);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// System.out.println(data.toString());
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// String result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
// System.out.println(sb.toString());
|
||||
// result = sb.toString();
|
||||
// } else {
|
||||
// // result = new SmsSingleSenderResult();
|
||||
// result = httpRspCode + "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
public String updateSmsTemplate(String url, String templateId, String content) throws Exception {
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// data.put("sig", util.strToHash(String.format("secretkey=%s&random=%d&time=%d", secretkey, random, curTime)));
|
||||
// data.put("content", content);
|
||||
// data.put("templateId", templateId);
|
||||
// data.put("time", curTime);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// System.out.println(data.toString());
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// String result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
// System.out.println(sb.toString());
|
||||
// result = sb.toString();
|
||||
// } else {
|
||||
// // result = new SmsSingleSenderResult();
|
||||
// result = httpRspCode + "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
public String findSmsTemplate(String url, String templateId) throws Exception {
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// data.put("sig", util.strToHash(String.format("secretkey=%s&random=%d&time=%d", secretkey, random, curTime)));
|
||||
// data.put("templateId", templateId);
|
||||
// data.put("time", curTime);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// System.out.println(data.toString());
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// String result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
// System.out.println(sb.toString());
|
||||
// result = sb.toString();
|
||||
// } else {
|
||||
// // result = new SmsSingleSenderResult();
|
||||
// result = httpRspCode + "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
90
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsVoiceVerifyCodeSender.java
Executable file
90
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsVoiceVerifyCodeSender.java
Executable file
@@ -0,0 +1,90 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
|
||||
//import org.json.JSONObject;
|
||||
|
||||
public class SmsVoiceVerifyCodeSender {
|
||||
String accesskey;
|
||||
String secretkey;
|
||||
String url = "https://live.kewail.com/sms/v1/sendvoice";
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
|
||||
public SmsVoiceVerifyCodeSender(String accesskey, String secretkey) {
|
||||
this.accesskey = accesskey;
|
||||
this.secretkey = secretkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送语音短信
|
||||
*
|
||||
* @param nationCode 国家码,如 86 为中国
|
||||
* @param phoneNumber 不带国家码的手机号
|
||||
* @param playtimes 目前只有 2
|
||||
* @param fileName 上传后生成的文件地址{@link}SmsVoiceUploader
|
||||
* @param ext 服务端原样返回的参数,可填空
|
||||
* @return {@link}SmsVoiceVerifyCodeSenderResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public SmsVoiceVerifyCodeSenderResult send(String nationCode, String phoneNumber, String msg, int playtimes,
|
||||
String ext) throws Exception {
|
||||
|
||||
if (null == ext) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// String sig = util.strToHash(secretkey, random, curTime, phoneNumber);
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// JSONObject tel = new JSONObject();
|
||||
// tel.put("nationcode", nationCode);
|
||||
// tel.put("mobile", phoneNumber);
|
||||
//
|
||||
// data.put("tel", tel);
|
||||
// data.put("msg", msg);
|
||||
// data.put("playtimes", playtimes);
|
||||
// data.put("sig", util.strToHash(
|
||||
// String.format("secretkey=%s&random=%d&time=%d&mobile=%s", secretkey, random, curTime, phoneNumber)));
|
||||
// data.put("time", curTime);
|
||||
// data.put("ext", ext);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// SmsVoiceVerifyCodeSenderResult result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// System.out.println(sb.toString());
|
||||
// br.close();
|
||||
// JSONObject json = new JSONObject(sb.toString());
|
||||
// result = util.jsonToSmsSingleVoiceSenderResult(json);
|
||||
// } else {
|
||||
// result = new SmsVoiceVerifyCodeSenderResult();
|
||||
// result.result = httpRspCode;
|
||||
// result.errmsg = "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
24
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsVoiceVerifyCodeSenderResult.java
Executable file
24
comm/Smsmoduyun/src/smsmoduyun/v1/yun/SmsVoiceVerifyCodeSenderResult.java
Executable file
@@ -0,0 +1,24 @@
|
||||
package smsmoduyun.v1.yun;
|
||||
|
||||
public class SmsVoiceVerifyCodeSenderResult {
|
||||
|
||||
/*
|
||||
* { "result": 0, //0表示成功,非0表示失败 "errmsg": "", //result非0时的具体错误信息 "ext":
|
||||
* "some msg", //可选字段,用户的session内容,Kewail server回包中会原样返回 "callid": "xxxx"
|
||||
* //标识本次发送id }
|
||||
*
|
||||
*/
|
||||
public int result;
|
||||
public String errmsg;
|
||||
public String ext = "";
|
||||
public String callid;
|
||||
|
||||
public String toString() {
|
||||
if (0 == result) {
|
||||
return String.format("SmsVoiceVerifyCodeSenderResult\nresult %d\nerrmsg %s\next %s\ncallid %s", result,
|
||||
errmsg, ext, callid);
|
||||
} else {
|
||||
return String.format("SmsVoiceVerifyCodeSenderResult\nresult %d\nerrmsg %s\next %s", result, errmsg, ext);
|
||||
}
|
||||
}
|
||||
}
|
||||
56
comm/Smsmoduyun/src/smsmoduyun/v2/SmsSDKDemoV2.java
Executable file
56
comm/Smsmoduyun/src/smsmoduyun/v2/SmsSDKDemoV2.java
Executable file
@@ -0,0 +1,56 @@
|
||||
package smsmoduyun.v2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import smsmoduyun.v2.yun.SmsSingleSender;
|
||||
import smsmoduyun.v2.yun.SmsSingleSenderResult;
|
||||
|
||||
public class SmsSDKDemoV2 {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 请根据实际 accesskey 和 secretkey 进行开发,以下只作为演示 sdk 使用
|
||||
// 请根据实际 accesskey 和 secretkey 进行开发,以下只作为演示 sdk 使用
|
||||
String accesskey = "5fcb6fe98e860971d34a4239";
|
||||
String secretkey = "64760a707a1547ce988d8bb2ba0ddd4e";
|
||||
|
||||
// type:0普通短信 1营销短信
|
||||
int type = 0;
|
||||
// 国家区号
|
||||
String nationcode = "86";
|
||||
// 手机号码
|
||||
String phoneNumber = "16534084800";
|
||||
// 短信签名ID (登录后台页面获取)
|
||||
String signId = "5fcb833d8e860971d34a426f";
|
||||
// 模板ID(登录后台页面获取)
|
||||
String templateId = "5a9599c66fcafe461546bb04";
|
||||
// 短信模板的变量值 ,将短信模板中的变量{0},{1}替换为参数中的值,如果短信模板中没有变量,则这个值填null
|
||||
List<String> params = new ArrayList<String>();
|
||||
// 模板中存在多个可变参数,可以添加对应的值。
|
||||
params.add("135321");
|
||||
|
||||
// 自定义字段,用户可以根据自己的需要来使用
|
||||
String ext = "";
|
||||
|
||||
// 初始化单发
|
||||
SmsSingleSender singleSender ;
|
||||
SmsSingleSenderResult singleSenderResult;
|
||||
// 普通单发,注意前面必须为【】符号包含,置于头或者尾部。
|
||||
// singleSenderResult = singleSender.send(type, nationcode, phoneNumber, signId, templateId, params, ext,
|
||||
// accesskey, secretkey);
|
||||
// System.out.println(singleSenderResult);
|
||||
// int a = 0;
|
||||
// if (singleSenderResult.errMsg == "OK") {
|
||||
// a = 1;
|
||||
//
|
||||
// } else {
|
||||
// a = 0;
|
||||
// }
|
||||
// System.out.println("a:" + a);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
139
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSenderUtil.java
Executable file
139
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSenderUtil.java
Executable file
@@ -0,0 +1,139 @@
|
||||
package smsmoduyun.v2.yun;
|
||||
|
||||
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;
|
||||
|
||||
//import org.json.JSONArray;
|
||||
//import org.json.JSONObject;
|
||||
|
||||
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<String> 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<String> 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<String> phoneNumbers = new ArrayList<>();
|
||||
phoneNumbers.add(phoneNumber);
|
||||
return calculateSigForTempl(accesskey, random, curTime, phoneNumbers);
|
||||
}
|
||||
|
||||
// public JSONArray phoneNumbersToJSONArray(String nationCode, ArrayList<String> phoneNumbers) {
|
||||
// JSONArray tel = new JSONArray();
|
||||
// int i = 0;
|
||||
// do {
|
||||
// JSONObject telElement = new JSONObject();
|
||||
// telElement.put("nationcode", nationCode);
|
||||
// telElement.put("mobile", phoneNumbers.get(i));
|
||||
// tel.put(telElement);
|
||||
// } while (++i < phoneNumbers.size());
|
||||
//
|
||||
// return tel;
|
||||
// }
|
||||
//
|
||||
// public JSONArray smsParamsToJSONArray(List<String> params) {
|
||||
// JSONArray smsParams = new JSONArray();
|
||||
// for (int i = 0; i < params.size(); i++) {
|
||||
// smsParams.put(params.get(i));
|
||||
// }
|
||||
// return smsParams;
|
||||
// }
|
||||
//
|
||||
// public SmsSingleSenderResult jsonToSmsSingleSenderResult(JSONObject json) {
|
||||
// SmsSingleSenderResult result = new SmsSingleSenderResult();
|
||||
//
|
||||
// result.result = json.getInt("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.getInt("result");
|
||||
// if (false == json.isNull("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"));
|
||||
// }
|
||||
|
||||
}
|
||||
104
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSingleSender.java
Executable file
104
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSingleSender.java
Executable file
@@ -0,0 +1,104 @@
|
||||
package smsmoduyun.v2.yun;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.List;
|
||||
|
||||
//import org.json.JSONObject;
|
||||
|
||||
|
||||
public class SmsSingleSender {
|
||||
// String accesskey;
|
||||
// String secretkey;
|
||||
// 同时支持http和https两种协议,具体根据自己实际情况使用。
|
||||
String url = "https://live.mordula.com/sms/v2/sendsinglesms";
|
||||
// String url =
|
||||
// "http://2p8773516g.qicp.vip:16416/live.kewail.com/sms/v2/sendsinglesms";
|
||||
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
//
|
||||
// public SmsSingleSender(String accesskey, String secretkey) throws Exception {
|
||||
// this.accesskey = accesskey;
|
||||
// this.secretkey = secretkey;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 指定签名和模板单发短信接口
|
||||
*
|
||||
* @param type 短信类型,0 为普通短信,1 营销短信
|
||||
// * @param nationCode 国家码,如 86 为中国
|
||||
* @param phoneNumber 不带国家码的手机号
|
||||
* @param signId 短信签名的Id
|
||||
* @param templateId 短信模板Id
|
||||
* @param params ,短信的变量参数值 ,将短信模板中的变量{0},{1}替换为参数中的值,如果短信模板中没有变量,这这个值填null
|
||||
* @param ext 服务端原样返回的参数,可填空
|
||||
* @return {@link}SmsSingleSenderResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public SmsSingleSenderResult send(int type, String nationcode, String phoneNumber, String signId, String templateId,
|
||||
List<String> params, String ext, String accesskey, String secretkey) throws Exception {
|
||||
|
||||
if (null == ext) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// JSONObject tel = new JSONObject();
|
||||
// tel.put("nationcode", nationcode);
|
||||
// tel.put("mobile", phoneNumber);
|
||||
//
|
||||
// data.put("signId", signId);
|
||||
// data.put("templateId", templateId);
|
||||
// data.put("type", type);
|
||||
// if (params != null && params.size() > 0) {
|
||||
// data.put("params", util.smsParamsToJSONArray(params));
|
||||
// }
|
||||
//
|
||||
// data.put("sig", util.strToHash(
|
||||
// String.format("secretkey=%s&random=%d&time=%d&mobile=%s", secretkey, random, curTime, phoneNumber)));
|
||||
// data.put("tel", tel);
|
||||
// data.put("time", curTime);
|
||||
// data.put("ext", ext);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
//// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
//// System.out.println(data.toString());
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// SmsSingleSenderResult result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// br.close();
|
||||
//// System.out.println(sb.toString());
|
||||
// JSONObject json = new JSONObject(sb.toString());
|
||||
// result = util.jsonToSmsSingleSenderResult(json);
|
||||
// } else {
|
||||
// result = new SmsSingleSenderResult();
|
||||
// result.result = httpRspCode;
|
||||
// result.errMsg = "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
60
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSingleSenderResult.java
Executable file
60
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsSingleSenderResult.java
Executable file
@@ -0,0 +1,60 @@
|
||||
package smsmoduyun.v2.yun;
|
||||
|
||||
public class SmsSingleSenderResult {
|
||||
/*
|
||||
* { "result": 0, "errmsg": "OK", "ext": "", "sid": "xxxxxxx", "fee": 1 }
|
||||
*/
|
||||
public int result;
|
||||
public String errMsg = "";
|
||||
public String ext = "";
|
||||
public String sid = "";
|
||||
|
||||
public int getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(int result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public String getErrMsg() {
|
||||
return errMsg;
|
||||
}
|
||||
|
||||
public void setErrMsg(String errMsg) {
|
||||
this.errMsg = errMsg;
|
||||
}
|
||||
|
||||
public String getExt() {
|
||||
return ext;
|
||||
}
|
||||
|
||||
public void setExt(String ext) {
|
||||
this.ext = ext;
|
||||
}
|
||||
|
||||
public String getSid() {
|
||||
return sid;
|
||||
}
|
||||
|
||||
public void setSid(String sid) {
|
||||
this.sid = sid;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return String.format("SmsSingleSenderResult\nresult %d\nerrMsg %s\next %s\nsid %s\n", result, errMsg, ext, sid);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SmsSingleSenderResult smsSingleSenderResult = new SmsSingleSenderResult();
|
||||
smsSingleSenderResult.setErrMsg("OK");
|
||||
int a = 0;
|
||||
if (smsSingleSenderResult.errMsg == "OK") {
|
||||
a = 1;
|
||||
System.out.println(a);
|
||||
} else
|
||||
|
||||
System.out.println(a);
|
||||
|
||||
}
|
||||
}
|
||||
90
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsVoiceVerifyCodeSender.java
Executable file
90
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsVoiceVerifyCodeSender.java
Executable file
@@ -0,0 +1,90 @@
|
||||
package smsmoduyun.v2.yun;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
|
||||
//import org.json.JSONObject;
|
||||
|
||||
public class SmsVoiceVerifyCodeSender {
|
||||
String accesskey;
|
||||
String secretkey;
|
||||
String url = "https://live.kewail.com/sms/v1/sendvoice";
|
||||
SmsSenderUtil util = new SmsSenderUtil();
|
||||
|
||||
public SmsVoiceVerifyCodeSender(String accesskey, String secretkey) {
|
||||
this.accesskey = accesskey;
|
||||
this.secretkey = secretkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送语音短信
|
||||
*
|
||||
* @param nationCode 国家码,如 86 为中国
|
||||
* @param phoneNumber 不带国家码的手机号
|
||||
* @param playtimes 目前只有 2
|
||||
// * @param fileName 上传后生成的文件地址{@link}SmsVoiceUploader
|
||||
* @param ext 服务端原样返回的参数,可填空
|
||||
* @return {@link}SmsVoiceVerifyCodeSenderResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public SmsVoiceVerifyCodeSenderResult send(String nationCode, String phoneNumber, String msg, int playtimes,
|
||||
String ext) throws Exception {
|
||||
|
||||
if (null == ext) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
long random = util.getRandom();
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
|
||||
// String sig = util.strToHash(secretkey, random, curTime, phoneNumber);
|
||||
|
||||
// 按照协议组织 post 请求包体
|
||||
// JSONObject data = new JSONObject();
|
||||
//
|
||||
// JSONObject tel = new JSONObject();
|
||||
// tel.put("nationcode", nationCode);
|
||||
// tel.put("mobile", phoneNumber);
|
||||
//
|
||||
// data.put("tel", tel);
|
||||
// data.put("msg", msg);
|
||||
// data.put("playtimes", playtimes);
|
||||
// data.put("sig", util.strToHash(
|
||||
// String.format("secretkey=%s&random=%d&time=%d&mobile=%s", secretkey, random, curTime, phoneNumber)));
|
||||
// data.put("time", curTime);
|
||||
// data.put("ext", ext);
|
||||
//
|
||||
// // 与上面的 random 必须一致
|
||||
// String wholeUrl = String.format("%s?accesskey=%s&random=%d", url, accesskey, random);
|
||||
// HttpURLConnection conn = util.getPostHttpConn(wholeUrl);
|
||||
//
|
||||
// OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
// System.out.println(data.toString());
|
||||
// wr.write(data.toString());
|
||||
// wr.flush();
|
||||
//
|
||||
// // 显示 POST 请求返回的内容
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// int httpRspCode = conn.getResponseCode();
|
||||
// SmsVoiceVerifyCodeSenderResult result;
|
||||
// if (httpRspCode == HttpURLConnection.HTTP_OK) {
|
||||
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
|
||||
// String line = null;
|
||||
// while ((line = br.readLine()) != null) {
|
||||
// sb.append(line);
|
||||
// }
|
||||
// System.out.println(sb.toString());
|
||||
// br.close();
|
||||
// JSONObject json = new JSONObject(sb.toString());
|
||||
// result = util.jsonToSmsSingleVoiceSenderResult(json);
|
||||
// } else {
|
||||
// result = new SmsVoiceVerifyCodeSenderResult();
|
||||
// result.result = httpRspCode;
|
||||
// result.errmsg = "http error " + httpRspCode + " " + conn.getResponseMessage();
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
24
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsVoiceVerifyCodeSenderResult.java
Executable file
24
comm/Smsmoduyun/src/smsmoduyun/v2/yun/SmsVoiceVerifyCodeSenderResult.java
Executable file
@@ -0,0 +1,24 @@
|
||||
package smsmoduyun.v2.yun;
|
||||
|
||||
public class SmsVoiceVerifyCodeSenderResult {
|
||||
|
||||
/*
|
||||
* { "result": 0, //0表示成功,非0表示失败 "errmsg": "", //result非0时的具体错误信息 "ext":
|
||||
* "some msg", //可选字段,用户的session内容,Kewail server回包中会原样返回 "callid": "xxxx"
|
||||
* //标识本次发送id }
|
||||
*
|
||||
*/
|
||||
public int result;
|
||||
public String errmsg;
|
||||
public String ext = "";
|
||||
public String callid;
|
||||
|
||||
public String toString() {
|
||||
if (0 == result) {
|
||||
return String.format("SmsVoiceVerifyCodeSenderResult\nresult %d\nerrmsg %s\next %s\ncallid %s", result,
|
||||
errmsg, ext, callid);
|
||||
} else {
|
||||
return String.format("SmsVoiceVerifyCodeSenderResult\nresult %d\nerrmsg %s\next %s", result, errmsg, ext);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user