|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
package com.cweb.controller; |
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
|
|
import com.hai.common.Base64Util; |
|
|
|
|
import com.hai.common.security.VerifyCode; |
|
|
|
|
import com.hai.common.security.VerifyCodeStorage; |
|
|
|
@ -8,6 +9,7 @@ import com.hai.common.utils.DateUtil; |
|
|
|
|
import com.hai.common.utils.HttpsUtils; |
|
|
|
|
import com.hai.common.utils.RedisUtil; |
|
|
|
|
import com.hai.common.utils.ResponseMsgUtil; |
|
|
|
|
import com.hai.model.MtSmsMessageModel; |
|
|
|
|
import com.hai.model.ResponseData; |
|
|
|
|
import io.swagger.annotations.Api; |
|
|
|
|
import io.swagger.annotations.ApiOperation; |
|
|
|
@ -20,9 +22,13 @@ import org.springframework.web.bind.annotation.RequestParam; |
|
|
|
|
import org.springframework.web.bind.annotation.ResponseBody; |
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
|
|
import javax.net.ssl.*; |
|
|
|
|
import java.io.*; |
|
|
|
|
import java.net.URL; |
|
|
|
|
import java.security.MessageDigest; |
|
|
|
|
import java.security.NoSuchAlgorithmException; |
|
|
|
|
import java.security.cert.CertificateException; |
|
|
|
|
import java.security.cert.X509Certificate; |
|
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
|
|
@Controller |
|
|
|
@ -34,13 +40,59 @@ public class SmsContentController { |
|
|
|
|
|
|
|
|
|
private static Logger log = LoggerFactory.getLogger(CmsContentController.class); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 设置不验证主机 |
|
|
|
|
*/ |
|
|
|
|
private static final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { |
|
|
|
|
@Override |
|
|
|
|
public boolean verify(String hostname, SSLSession session) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private RedisUtil redisUtil; |
|
|
|
|
|
|
|
|
|
// @RequestMapping(value = "/sendSmsCode", method = RequestMethod.GET)
|
|
|
|
|
// @ApiOperation(value = "发送短信验证码")
|
|
|
|
|
// @ResponseBody
|
|
|
|
|
// public ResponseData sendSmsCode(@RequestParam(value = "phone", required = true) String phone) {
|
|
|
|
|
// try {
|
|
|
|
|
// VerifyCode verifyCode = VerifyCodeStorage.getDate(phone);
|
|
|
|
|
// String smsCode;
|
|
|
|
|
// if (verifyCode != null){
|
|
|
|
|
// smsCode = verifyCode.getObject();
|
|
|
|
|
// }else{
|
|
|
|
|
// // 生成随机6位验证码
|
|
|
|
|
// smsCode = String.valueOf(new Random().nextInt(899999) + 100000);
|
|
|
|
|
// }
|
|
|
|
|
// String param = "88200409698&to="+phone+"&templateId=f42261f78d54488391f1d1ac4bd5bd3f&templateParas=[\"" + smsCode +"\"]";
|
|
|
|
|
// Map<String,Object> body = new LinkedHashMap<>();
|
|
|
|
|
// body.put("from", param);
|
|
|
|
|
// String nonce = UUID.randomUUID().toString();
|
|
|
|
|
// String created = DateUtil.date2String(new Date(), "yyyy-MM-dd'T'HH:mm:ss'Z'");
|
|
|
|
|
// String passwordDigest = Base64Util.encode(encodeBySHA256(nonce + created + "9CWFv4NlaRX49n43VPA6eucZ8xeQ")) + "==";
|
|
|
|
|
// Map<String,Object> header = new LinkedHashMap<>();
|
|
|
|
|
// header.put("Authorization", "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\"");
|
|
|
|
|
// header.put("X-WSSE", "UsernameToken Username=\"QR5eMVrcW0Md6r634M6tf2i34cvb\",PasswordDigest=\""+passwordDigest+"\",Nonce=\""+nonce+"\",Created=\""+created+"\"");
|
|
|
|
|
// JSONObject object = HttpsUtils.doSmsPost("https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1", body,header);
|
|
|
|
|
// String code = object.getString("code");
|
|
|
|
|
// if (code.equals("000000")) {
|
|
|
|
|
// redisUtil.set(phone,smsCode, 60*10);
|
|
|
|
|
// return ResponseMsgUtil.success("发送成功");
|
|
|
|
|
// }
|
|
|
|
|
// return ResponseMsgUtil.success(object);
|
|
|
|
|
// } catch (Exception e) {
|
|
|
|
|
// log.error("CmsContentController --> sendSmsCode() error!", e);
|
|
|
|
|
// return ResponseMsgUtil.exception(e);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/sendSmsCode", method = RequestMethod.GET) |
|
|
|
|
@ApiOperation(value = "发送短信验证码") |
|
|
|
|
@ResponseBody |
|
|
|
|
public ResponseData sendSmsCode(@RequestParam(value = "phone", required = true) String phone) { |
|
|
|
|
public ResponseData sendSmsCodeHw(@RequestParam(value = "phone", required = true) String phone) { |
|
|
|
|
try { |
|
|
|
|
VerifyCode verifyCode = VerifyCodeStorage.getDate(phone); |
|
|
|
|
String smsCode; |
|
|
|
@ -50,28 +102,135 @@ public class SmsContentController { |
|
|
|
|
// 生成随机6位验证码
|
|
|
|
|
smsCode = String.valueOf(new Random().nextInt(899999) + 100000); |
|
|
|
|
} |
|
|
|
|
String param = "88200409698&to="+phone+"&templateId=f42261f78d54488391f1d1ac4bd5bd3f&templateParas=[\"" + smsCode +"\"]"; |
|
|
|
|
Map<String,Object> body = new LinkedHashMap<>(); |
|
|
|
|
body.put("from", param); |
|
|
|
|
String nonce = UUID.randomUUID().toString(); |
|
|
|
|
String created = DateUtil.date2String(new Date(), "yyyy-MM-dd'T'HH:mm:ss'Z'"); |
|
|
|
|
String passwordDigest = Base64Util.encode(encodeBySHA256(nonce + created + "9CWFv4NlaRX49n43VPA6eucZ8xeQ")) + "=="; |
|
|
|
|
Map<String,Object> header = new LinkedHashMap<>(); |
|
|
|
|
header.put("Authorization", "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\""); |
|
|
|
|
header.put("X-WSSE", "UsernameToken Username=\"QR5eMVrcW0Md6r634M6tf2i34cvb\",PasswordDigest=\""+passwordDigest+"\",Nonce=\""+nonce+"\",Created=\""+created+"\""); |
|
|
|
|
JSONObject object = HttpsUtils.doSmsPost("https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1", body,header); |
|
|
|
|
String code = object.getString("code"); |
|
|
|
|
if (code.equals("000000")) { |
|
|
|
|
redisUtil.set(phone,smsCode, 60*10); |
|
|
|
|
return ResponseMsgUtil.success("发送成功"); |
|
|
|
|
// ip:port根据实际情况填写
|
|
|
|
|
String url = "https://139.9.32.119:18312/common/sms/sendTemplateMessage"; |
|
|
|
|
String msisdn = phone; |
|
|
|
|
String smsTemplateId = "SMS_21092300061"; |
|
|
|
|
Map<String, String> templateParas = new HashMap<String, String>(); |
|
|
|
|
templateParas.put("code", smsCode); |
|
|
|
|
String account = "760887"; //实际账号
|
|
|
|
|
String password = "Z.o'&mO%7_?5M,Br"; //实际密码
|
|
|
|
|
|
|
|
|
|
// If the request body does not contain the signature name, set signature to null.
|
|
|
|
|
Map<String, Object> body = buildRequestBody(msisdn, smsTemplateId, templateParas, account, password); |
|
|
|
|
if (null == body || body.isEmpty()) { |
|
|
|
|
System.out.println("body is null."); |
|
|
|
|
return ResponseMsgUtil.success(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HttpsURLConnection connection = null; |
|
|
|
|
InputStream is = null; |
|
|
|
|
BufferedReader br = null; |
|
|
|
|
trustAllHttpsCertificates(); |
|
|
|
|
try { |
|
|
|
|
URL realUrl = new URL(url); |
|
|
|
|
connection = (HttpsURLConnection) realUrl.openConnection(); |
|
|
|
|
connection.setHostnameVerifier(DO_NOT_VERIFY); |
|
|
|
|
connection.setDoInput(true); // 设置可输入
|
|
|
|
|
connection.setDoOutput(true); // 设置该连接是可以输出的
|
|
|
|
|
connection.setRequestMethod("POST"); // 设置请求方式
|
|
|
|
|
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); |
|
|
|
|
// connection.connect();
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper(); |
|
|
|
|
PrintWriter pw = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8")); |
|
|
|
|
pw.write(objectMapper.writeValueAsString(body)); |
|
|
|
|
pw.flush(); |
|
|
|
|
pw.close(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8")); |
|
|
|
|
int status = connection.getResponseCode(); |
|
|
|
|
if (200 == status) { // 200
|
|
|
|
|
is = connection.getInputStream(); |
|
|
|
|
} else { // 400/401
|
|
|
|
|
is = connection.getErrorStream(); |
|
|
|
|
} |
|
|
|
|
br = new BufferedReader(new InputStreamReader(is, "UTF-8")); |
|
|
|
|
String line = null; |
|
|
|
|
StringBuilder result = new StringBuilder(); |
|
|
|
|
while ((line = br.readLine()) != null) { // 读取数据
|
|
|
|
|
result.append(line + "\n"); |
|
|
|
|
} |
|
|
|
|
connection.disconnect(); |
|
|
|
|
System.out.println(result.toString()); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} finally { |
|
|
|
|
try { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (null != is) { |
|
|
|
|
is.close(); |
|
|
|
|
} |
|
|
|
|
if (null != br) { |
|
|
|
|
br.close(); |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ResponseMsgUtil.success(object); |
|
|
|
|
redisUtil.set(phone,smsCode, 60*10); |
|
|
|
|
return ResponseMsgUtil.success("发送成功"); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("CmsContentController --> sendSmsCode() error!", e); |
|
|
|
|
return ResponseMsgUtil.exception(e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// msisdn, smsTemplateId, paramValues, countryID
|
|
|
|
|
public static Map<String, Object> buildRequestBody(String msisdn, String smsTemplateId, |
|
|
|
|
Map<String, String> paramValues, String accout, String passward) { |
|
|
|
|
if (null == msisdn || null == smsTemplateId || null == accout || null == passward) { |
|
|
|
|
System.out.println( |
|
|
|
|
"buildRequestBody(): mobiles, templateId or templateParas or account or password is null."); |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> map = new HashMap<String, Object>(); |
|
|
|
|
List<MtSmsMessageModel> requestLists = new ArrayList<MtSmsMessageModel>(); |
|
|
|
|
MtSmsMessageModel mtSmsMessage = new MtSmsMessageModel(); |
|
|
|
|
List<String> mobiles = new ArrayList<String>(); |
|
|
|
|
mobiles.add(msisdn); |
|
|
|
|
mtSmsMessage.setMobiles(mobiles); |
|
|
|
|
mtSmsMessage.setTemplateId(smsTemplateId); |
|
|
|
|
mtSmsMessage.setTemplateParas(paramValues); |
|
|
|
|
mtSmsMessage.setSignature("【嗨森逛】"); |
|
|
|
|
requestLists.add(mtSmsMessage); |
|
|
|
|
map.put("account", accout); |
|
|
|
|
map.put("password", passward); |
|
|
|
|
map.put("requestLists", requestLists); |
|
|
|
|
return map; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void trustAllHttpsCertificates() throws Exception { |
|
|
|
|
TrustManager[] trustAllCerts = new TrustManager[] { |
|
|
|
|
new X509TrustManager() { |
|
|
|
|
@Override |
|
|
|
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public X509Certificate[] getAcceptedIssuers() { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
SSLContext sc = SSLContext.getInstance("SSL"); |
|
|
|
|
sc.init(null, trustAllCerts, null); |
|
|
|
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/getSmsCode", method = RequestMethod.GET) |
|
|
|
|
@ApiOperation(value = "发送短信验证码") |
|
|
|
|
@ResponseBody |
|
|
|
|