Commit 8f51bb00 by giaogiao

微信登陆相关.短信验证码

parent 25af0193
...@@ -20,6 +20,31 @@ ...@@ -20,6 +20,31 @@
<groupId>io.geekidea.springbootplus</groupId> <groupId>io.geekidea.springbootplus</groupId>
<artifactId>framework</artifactId> <artifactId>framework</artifactId>
</dependency> </dependency>
<!-- fastbootWeixin的核心依赖 -->
<dependency>
<groupId>com.mxixm</groupId>
<artifactId>fastboot-weixin</artifactId>
<version>0.6.2</version>
</dependency>
<!-- SpringBoot的web项目,必须 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 暂时只能使用apache的http,后续可加入其它http支持 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!-- 友盟 start --> <!-- 友盟 start -->
<dependency> <dependency>
......
...@@ -40,16 +40,16 @@ public class AppSmsController extends BaseController { ...@@ -40,16 +40,16 @@ public class AppSmsController extends BaseController {
return appSmsService.registerOrLoginCode(phoneArea, phone); return appSmsService.registerOrLoginCode(phoneArea, phone);
} }
// /** /**
// * 获取修改手机号的验证码 * 获取修改手机号的验证码
// */ */
// @GetMapping("/updatePhoneCode") @GetMapping("/updatePhoneCode")
// @OperationLog(name = "获取修改手机号的验证码", type = OperationLogType.INFO) @OperationLog(name = "获取修改手机号的验证码", type = OperationLogType.INFO)
// @ApiOperation(value = "获取修改手机号的验证码", response = Object.class, notes = "本地环境默认666666") @ApiOperation(value = "获取修改手机号的验证码", response = Object.class, notes = "本地环境默认666666")
// public ApiResult<Object> updatePhoneCode() throws Exception { public ApiResult<Object> updatePhoneCode() throws Exception {
//
// return appSmsService.updatePhoneCode(); return appSmsService.updatePhoneCode();
// } }
} }
package com.sien.common.controller;
import com.sien.common.service.AppUserService;
import com.sien.common.vo.AppUserQueryVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.log.annotation.Module;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* APP用户 控制器
*
* @author wei
* @since 2020-09-23
*/
@Slf4j
@RestController
@Module("api-app")
@Api(value = "微信登陆相关", tags = {"微信登陆相关"})
@RequestMapping("/wechatUser")
public class WechatUserController extends BaseController {
@Autowired
private AppUserService appUserService;
/**
* 根据微信重定向code查询用户是否绑定
*/
@GetMapping("/check/")
@OperationLog(name = "根据微信重定向code查询用户是否绑定", type = OperationLogType.INFO)
@ApiOperation(value = "根据微信重定向code查询用户是否绑定", response = AppUserQueryVo.class)
public ApiResult<AppUserQueryVo> getAppUser() throws Exception {
AppUserQueryVo appUserQueryVo = appUserService.getMyInfo();
return ApiResult.ok(appUserQueryVo);
}
}
package com.sien.common.controller;
import com.sien.common.sms.SignUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*微信服务器配置 验证api
*/
@Slf4j
@RestController
@RequestMapping("/wxapi")
public class WxConfigController {
/**
* @return
* @description 微信公众号服务器配置校验token
* @author: liyinlong
* @date 2019-05-09 9:38
*/
@ApiOperation("微信公众号服务器配置校验token")
@RequestMapping("/checkToken")
public void checkToken(HttpServletRequest request, HttpServletResponse response) {
//token验证代码段
try {
log.info("请求已到达,开始校验token");
if (StringUtils.isNotBlank(request.getParameter("signature"))) {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
log.info("signature[{}], timestamp[{}], nonce[{}], echostr[{}]", signature, timestamp, nonce, echostr);
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
log.info("数据源为微信后台,将echostr[{}]返回!", echostr);
response.getOutputStream().println(echostr);
}
}
} catch (IOException e) {
log.error("校验出错");
e.printStackTrace();
}
}
}
\ No newline at end of file
...@@ -12,7 +12,7 @@ public interface AppSmsService { ...@@ -12,7 +12,7 @@ public interface AppSmsService {
* 获取注册验证码 * 获取注册验证码
*/ */
ApiResult<Object> registerOrLoginCode(String phoneArea, String phone); ApiResult<Object> registerOrLoginCode(String phoneArea, String phone);
// ApiResult<Object> updatePhoneCode() throws Exception; ApiResult<Object> updatePhoneCode() throws Exception;
/** /**
* 获取注册验证码 * 获取注册验证码
......
...@@ -3,9 +3,12 @@ package com.sien.common.service.impl; ...@@ -3,9 +3,12 @@ package com.sien.common.service.impl;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.sien.common.service.AppSmsService; import com.sien.common.service.AppSmsService;
import com.sien.common.service.AppUserService; import com.sien.common.service.AppUserService;
import com.sien.common.vo.AppUserQueryVo;
import com.sien.common.vo.SmsCode; import com.sien.common.vo.SmsCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -71,12 +74,12 @@ public class AppSmsServiceImpl implements AppSmsService { ...@@ -71,12 +74,12 @@ public class AppSmsServiceImpl implements AppSmsService {
return getSmsCodeApiResult(String.format(SMS_REGIEST, area, number), area, number); return getSmsCodeApiResult(String.format(SMS_REGIEST, area, number), area, number);
} }
// @Override @Override
// public ApiResult<Object> updatePhoneCode() throws Exception { public ApiResult<Object> updatePhoneCode() throws Exception {
// JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal(); JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal();
// AppUserQueryVo appUserById = appUserService.getAppUserById(jwtToken.getUserId()); AppUserQueryVo appUserById = appUserService.getAppUserById(jwtToken.getUserId());
// return getSmsCodeApiResult(String.format(SMS_UPDATE, appUserById.getPhoneArea(), appUserById.getPhone()), appUserById.getPhoneArea(), appUserById.getPhone()); return getSmsCodeApiResult(String.format(SMS_UPDATE, appUserById.getPhoneArea(), appUserById.getPhone()), appUserById.getPhoneArea(), appUserById.getPhone());
// } }
/** /**
* 获取短信验证码 * 获取短信验证码
......
...@@ -2,13 +2,14 @@ package com.sien.common.service.impl; ...@@ -2,13 +2,14 @@ package com.sien.common.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sien.common.service.AppSmsService; import com.sien.common.entity.AppUser;
import com.sien.common.service.AppUserApiService;
import com.sien.common.param.app.AppSmsRegisterParam; import com.sien.common.param.app.AppSmsRegisterParam;
import com.sien.common.param.app.AppUserInfoParam; import com.sien.common.param.app.AppUserInfoParam;
import com.sien.common.service.AppSmsService;
import com.sien.common.service.AppUserApiService;
import com.sien.common.service.AppUserService; import com.sien.common.service.AppUserService;
import com.sien.common.vo.AppUserQueryVo;
import com.sien.common.vo.app.LoginAppUserTokenVo; import com.sien.common.vo.app.LoginAppUserTokenVo;
import com.sien.common.entity.AppUser;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken; import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
...@@ -31,36 +32,36 @@ public class AppUserApiServiceImpl implements AppUserApiService { ...@@ -31,36 +32,36 @@ public class AppUserApiServiceImpl implements AppUserApiService {
@Override @Override
public ApiResult<Boolean> updatePhone(String phoneArea, String phone, String code) throws Exception { public ApiResult<Boolean> updatePhone(String phoneArea, String phone, String code) throws Exception {
// JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal(); JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal();
//
// AppUserQueryVo appUserById = appUserService.getAppUserById(jwtToken.getUserId()); AppUserQueryVo appUserById = appUserService.getAppUserById(jwtToken.getUserId());
//
// // 校验验证码 // 校验验证码
// boolean equalsRegisterCode = appSmsService.equalsUpdatePhoneCode(appUserById.getPhoneArea(), appUserById.getPhone(), code); boolean equalsRegisterCode = appSmsService.equalsUpdatePhoneCode(appUserById.getPhoneArea(), appUserById.getPhone(), code);
// if (!equalsRegisterCode) { if (!equalsRegisterCode) {
// return ApiResult.fail(ApiCode.SMS_CODE_ERROR); return ApiResult.fail(ApiCode.SMS_CODE_ERROR);
// } }
// // 删除已使用的验证码 // 删除已使用的验证码
// appSmsService.deleteUpdatePhoneCode(appUserById.getPhoneArea(), appUserById.getPhone()); appSmsService.deleteUpdatePhoneCode(appUserById.getPhoneArea(), appUserById.getPhone());
//
// // 判断手机号是否已经注册 // 判断手机号是否已经注册
// AppUser one = appUserService.getOne(new QueryWrapper<AppUser>().lambda() AppUser one = appUserService.getOne(new QueryWrapper<AppUser>().lambda()
// .eq(AppUser::getPhoneArea, phoneArea) .eq(AppUser::getPhoneArea, phoneArea)
// .eq(AppUser::getPhone, phone)); .eq(AppUser::getPhone, phone));
// if (one != null) { if (one != null) {
// return ApiResult.fail(ApiCode.BUSINESS_EXCEPTION); return ApiResult.fail(ApiCode.BUSINESS_EXCEPTION);
// } }
//
//
// AppUser appUser = new AppUser(); AppUser appUser = new AppUser();
// appUser.setPhoneArea(phoneArea); appUser.setPhoneArea(phoneArea);
// appUser.setPhone(phone); appUser.setPhone(phone);
// appUser.setId(jwtToken.getUserId()); appUser.setId(jwtToken.getUserId());
//
// boolean b = appUserService.updateById(appUser); boolean b = appUserService.updateById(appUser);
// if (b) { if (b) {
// return ApiResult.ok(); return ApiResult.ok();
// } }
return ApiResult.fail(); return ApiResult.fail();
} }
......
package com.sien.common.sms;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
//如果JDK版本是1.8,可使用原生Base64类
//如果JDK版本低于1.8,请使用三方库提供Base64类
//import org.apache.commons.codec.binary.Base64;
public class SendSms {
//无需修改,用于格式化鉴权头域,给"X-WSSE"参数赋值
private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"";
//无需修改,用于格式化鉴权头域,给"Authorization"参数赋值
private static final String AUTH_HEADER_VALUE = "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\"";
public static void main(String[] args) throws Exception {
String ramdom = "369751";
send("+8617621701106", ramdom);
}
private static void send(String receiver, String ramdom) throws Exception {
//必填,请参考"开发准备"获取如下数据,替换为实际值
String url = "https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1"; //APP接入地址+接口访问URI
String appKey = "FKFPgk3X6VRYAMJ9r9CIJWG2709W"; //APP_Key
String appSecret = "gvS2S8nD01vKCA1v45qi379gu1T5"; //APP_Secret
String sender = "8821030205711"; //国内短信签名通道号或国际/港澳台短信通道号
String templateId = "b55b51e3871947cebc65ca716e2e43a0"; //模板ID
//条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
//国际/港澳台短信不用关注该参数
String signature = "四恩慈善会"; //签名名称
//必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔
// String receiver = "+8615123456789,+8615234567890"; //短信接收人号码
// String receiver = "+8617621701106"; //短信接收人号码
//选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
String statusCallBack = "";
/**
* 选填,使用无变量模板时请赋空值 String templateParas = "";
* 单变量模板示例:模板内容为"您的验证码是${1}"时,templateParas可填写为"[\"369751\"]"
* 双变量模板示例:模板内容为"您有${1}件快递请到${2}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]"
* 模板中的每个变量都必须赋值,且取值不能为空
* 查看更多模板和变量规范:产品介绍>模板和变量规范
*/
String templateParas = "[\"" + ramdom + "\"]"; //模板变量,此处以单变量验证码短信为例,请客户自行生成6位验证码,并定义为字符串类型,以杜绝首位0丢失的问题(例如:002569变成了2569)。
//请求Body,不携带签名名称时,signature请填null
String body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, signature);
if (null == body || body.isEmpty()) {
System.out.println("body is null.");
return;
}
//请求Headers中的X-WSSE参数值
String wsseHeader = buildWsseHeader(appKey, appSecret);
if (null == wsseHeader || wsseHeader.isEmpty()) {
System.out.println("wsse header is null.");
return;
}
Writer out = null;
BufferedReader in = null;
StringBuffer result = new StringBuffer();
HttpsURLConnection connection = null;
InputStream is = null;
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
trustAllHttpsCertificates();
try {
URL realUrl = new URL(url);
connection = (HttpsURLConnection) realUrl.openConnection();
connection.setHostnameVerifier(hv);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(true);
//请求方法
connection.setRequestMethod("POST");
//请求Headers参数
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Authorization", AUTH_HEADER_VALUE);
connection.setRequestProperty("X-WSSE", wsseHeader);
connection.connect();
out = new OutputStreamWriter(connection.getOutputStream());
out.write(body); //发送请求Body参数
out.flush();
out.close();
int status = connection.getResponseCode();
if (200 == status) { //200
is = connection.getInputStream();
} else { //400/401
is = connection.getErrorStream();
}
in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line = "";
while ((line = in.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString()); //打印响应消息实体
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.close();
}
if (null != is) {
is.close();
}
if (null != in) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 构造请求Body体
*
* @param sender
* @param receiver
* @param templateId
* @param templateParas
* @param statusCallBack
* @param signature | 签名名称,使用国内短信通用模板时填写
* @return
*/
static String buildRequestBody(String sender, String receiver, String templateId, String templateParas,
String statusCallBack, String signature) {
if (null == sender || null == receiver || null == templateId || sender.isEmpty() || receiver.isEmpty()
|| templateId.isEmpty()) {
System.out.println("buildRequestBody(): sender, receiver or templateId is null.");
return null;
}
Map<String, String> map = new HashMap<String, String>();
map.put("from", sender);
map.put("to", receiver);
map.put("templateId", templateId);
if (null != templateParas && !templateParas.isEmpty()) {
map.put("templateParas", templateParas);
}
if (null != statusCallBack && !statusCallBack.isEmpty()) {
map.put("statusCallback", statusCallBack);
}
if (null != signature && !signature.isEmpty()) {
map.put("signature", signature);
}
StringBuilder sb = new StringBuilder();
String temp = "";
for (String s : map.keySet()) {
try {
temp = URLEncoder.encode(map.get(s), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
sb.append(s).append("=").append(temp).append("&");
}
return sb.deleteCharAt(sb.length() - 1).toString();
}
/**
* 构造X-WSSE参数值
*
* @param appKey
* @param appSecret
* @return
*/
static String buildWsseHeader(String appKey, String appSecret) {
if (null == appKey || null == appSecret || appKey.isEmpty() || appSecret.isEmpty()) {
System.out.println("buildWsseHeader(): appKey or appSecret is null.");
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String time = sdf.format(new Date()); //Created
String nonce = UUID.randomUUID().toString().replace("-", ""); //Nonce
MessageDigest md;
byte[] passwordDigest = null;
try {
md = MessageDigest.getInstance("SHA-256");
md.update((nonce + time + appSecret).getBytes());
passwordDigest = md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//如果JDK版本是1.8,请加载原生Base64类,并使用如下代码
String passwordDigestBase64Str = Base64.getEncoder().encodeToString(passwordDigest); //PasswordDigest
//如果JDK版本低于1.8,请加载三方库提供Base64类,并使用如下代码
//String passwordDigestBase64Str = Base64.encodeBase64String(passwordDigest); //PasswordDigest
//若passwordDigestBase64Str中包含换行符,请执行如下代码进行修正
//passwordDigestBase64Str = passwordDigestBase64Str.replaceAll("[\\s*\t\n\r]", "");
return String.format(WSSE_HEADER_FORMAT, appKey, passwordDigestBase64Str, nonce, time);
}
/**
* @throws Exception
*/
static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return;
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return;
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
}
package com.sien.common.sms;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class SignUtil {
private static String token = "sDsdaSDADad";
/**
* 校验签名
* @param signature 签名
* @param timestamp 时间戳
* @param nonce 随机数
* @return 布尔值
*/
public static boolean checkSignature(String signature,String timestamp,String nonce){
String checktext = null;
if (null != signature) {
//对ToKen,timestamp,nonce 按字典排序
String[] paramArr = new String[]{token,timestamp,nonce};
Arrays.sort(paramArr);
//将排序后的结果拼成一个字符串
String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
//对接后的字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
checktext = byteToStr(digest);
} catch (NoSuchAlgorithmException e){
e.printStackTrace();
}
}
//将加密后的字符串与signature进行对比
return checktext !=null ? checktext.equals(signature.toUpperCase()) : false;
}
/**
* 将字节数组转化我16进制字符串
* @param byteArrays 字符数组
* @return 字符串
*/
private static String byteToStr(byte[] byteArrays){
String str = "";
for (int i = 0; i < byteArrays.length; i++) {
str += byteToHexStr(byteArrays[i]);
}
return str;
}
/**
* 将字节转化为十六进制字符串
* @param myByte 字节
* @return 字符串
*/
private static String byteToHexStr(byte myByte) {
char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] tampArr = new char[2];
tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
tampArr[1] = Digit[myByte & 0X0F];
String str = new String(tampArr);
return str;
}
}
package com.sien.common.sms;
import cn.wecloud.sdk.common.exception.WeCloudApiException;
import cn.wecloud.sdk.sms.client.WeCloudSmsClient;
import cn.wecloud.sdk.sms.data.WeCloudSmsSingleSendResult;
import cn.wecloud.sdk.sms.model.WeCloudSmsAbroadModel;
import cn.wecloud.sdk.sms.request.WeCloudSmsDomesticSingleSendRequest;
import cn.wecloud.sdk.sms.response.WeCloudSmsDomesticSingleSendResponse;
//@Slf4j
public class SmsUtil {
public static void main(String[] args) throws WeCloudApiException {
// 创建连接对象
final WeCloudSmsClient client = new WeCloudSmsClient("9XPgCY9rAb1GG2yg");
// 创建请求信息对象
final WeCloudSmsAbroadModel model = new WeCloudSmsAbroadModel("855", "081612642", "1323474417736716290", "888888");
// 创建请求对象
final WeCloudSmsDomesticSingleSendRequest request = new WeCloudSmsDomesticSingleSendRequest(model);
// 执行请求
final WeCloudSmsDomesticSingleSendResponse execute = client.execute(request);
// 判断是否请求成功
if (execute.isSuccess()) {
// 获取返回业务对象
final WeCloudSmsSingleSendResult result = execute.getData();
} else {
// 输出请求失败信息
// log.error(execute.getMsg());
}
}
public static void send(String areaCode, String phone, String verificationCode) throws WeCloudApiException {
// 创建连接对象
final WeCloudSmsClient client = new WeCloudSmsClient("9XPgCY9rAb1GG2yg");
// 创建请求信息对象
String templateId = "1323474417736716290";
final WeCloudSmsAbroadModel model = new WeCloudSmsAbroadModel(areaCode, phone, templateId, verificationCode);
// 创建请求对象
final WeCloudSmsDomesticSingleSendRequest request = new WeCloudSmsDomesticSingleSendRequest(model);
// 执行请求
final WeCloudSmsDomesticSingleSendResponse execute = client.execute(request);
// 判断是否请求成功
if (execute.isSuccess()) {
// 获取返回业务对象
final WeCloudSmsSingleSendResult result = execute.getData();
} else {
// 输出请求失败信息
// log.error(execute.getMsg());
}
}
}
...@@ -12,9 +12,18 @@ spring-boot-plus: ...@@ -12,9 +12,18 @@ spring-boot-plus:
request-log-format: false request-log-format: false
response-log-format: false response-log-format: false
wx:
token: sDsdaSDADad
# 测试号的appid,测试号管理界面有
appid: wx7aac805012428dc5
# 测试号的appsecret,测试号管理界面有
appsecret:
# =服务调用的url地址,用于微信web的oauth2授权回调等,若没有可为空。
callback-url: wx7aac805012428dc5
spring: spring:
datasource: datasource:
url: jdbc:mysql://47.99.47.225:3306/SiEn?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true url: jdbc:mysql://47.99.47.225:3306/sien?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: temple123456 password: temple123456
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
############################# 访问路径、端口tomcat start ############################# ############################# 访问路径、端口tomcat start #############################
server: server:
port: 8889 port: 80
servlet: servlet:
context-path: /api context-path: /api
tomcat: tomcat:
...@@ -185,6 +185,8 @@ spring-boot-plus: ...@@ -185,6 +185,8 @@ spring-boot-plus:
# 排除登录 注册 登出 # 排除登录 注册 登出
- /user/registerOrLogin,/user/login - /user/registerOrLogin,/user/login
- /sms/registerOrLoginCode - /sms/registerOrLoginCode
- /wechatUser/check
- /wxapi/checkToken
# 排除静态资源 # 排除静态资源
- /static/**,/templates/** - /static/**,/templates/**
# 排除Swagger # 排除Swagger
...@@ -303,7 +305,7 @@ spring-boot-plus: ...@@ -303,7 +305,7 @@ spring-boot-plus:
enable: true enable: true
base: base:
# 扫描的包,多个包使用逗号隔开 # 扫描的包,多个包使用逗号隔开
package: io.geekidea.springbootplus,com.sien package: io.geekidea.springbootplus,com.sien.com.sien.common
contact: contact:
email: sien email: sien
name: sien name: sien
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment