| @@ -1,9 +1,9 @@ | |||||
| FROM openjdk:8 | FROM openjdk:8 | ||||
| MAINTAINER yangkai | MAINTAINER yangkai | ||||
| ADD target/sms-msg-sender-1.0-SNAPSHOT.jar sms-msg-sender.jar | |||||
| ADD target/sms-msg-sender.jar sms-msg-sender.jar | |||||
| COPY application.yml / | COPY application.yml / | ||||
| RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime | RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime | ||||
| EXPOSE 8080 | |||||
| EXPOSE 9950 | |||||
| ENTRYPOINT ["java","-jar","sms-msg-sender.jar","--spring.config.location=/application.yml"] | ENTRYPOINT ["java","-jar","sms-msg-sender.jar","--spring.config.location=/application.yml"] | ||||
| # docker run -d --restart=always --name dg-sms-sender -p 9950:9950 dg-sms-sender:v1 //运行镜像 | # docker run -d --restart=always --name dg-sms-sender -p 9950:9950 dg-sms-sender:v1 //运行镜像 | ||||
| @@ -0,0 +1,48 @@ | |||||
| server: | |||||
| port: 9950 | |||||
| nacos: | |||||
| config: | |||||
| server-addr: 127.0.0.1:8848 | |||||
| # namespace: 6d0ee265-2a92-44cc-a6de-f34b3ea104e6 | |||||
| enabled: true | |||||
| file-extension: yaml | |||||
| blocking-queue-size: 5000 | |||||
| sys: | |||||
| baseUrl: http://dev.hjkjg.top | |||||
| mms: | |||||
| url: http://192.168.10.119:9950 | |||||
| receptionPhones: 18910801519 | |||||
| accessKeyId: LTAI5tBxoXcHTkMZv1jUwCT8 | |||||
| accessKeySecrect: E8i2eWczpxOIcYGtX9D0lNJtHApmh2 | |||||
| endpoint: dysmsapi.aliyuncs.com | |||||
| signName: 缔智元 | |||||
| signNameVisitor: 缔智元 | |||||
| template: SMS_228835440 | |||||
| carTemplate: SMS_228850376 | |||||
| fixedTemplate: SMS_228835443 | |||||
| codeTemplate: SMS_229300003 | |||||
| meetingOrderTemplate: SMS_460710519 | |||||
| meetingQuitTemplate: SMS_460685561 | |||||
| meetingRemindTemplate: SMS_460655546 | |||||
| defaultRemindTemplate: SMS_460715556 | |||||
| visitorTemplate: SMS_461045124 | |||||
| robotName: 小酷 | |||||
| wx: | |||||
| mp: | |||||
| useRedis: false | |||||
| redisConfig: | |||||
| host: 127.0.0.1 | |||||
| port: 6379 | |||||
| configs: | |||||
| - appId: wxde105494dd27c1ac # 第一个公众号的appid | |||||
| secret: f81e44ef5a1ed2235ce471f0ee3d1445 # 公众号的appsecret | |||||
| token: 83u4h # 接口配置里的Token值 | |||||
| pushMsgTemplateId: BQlE4WmvD6C2YG6aMYUxlSztBYbiSFe_KjQaneTWrHY | |||||
| auditTemplateId: Y1qGJ7SjY4GFky9V101dV8rYQzDR1uZ8g3e6d16M1Ts | |||||
| regAuditTemplateId: RYDfkUjIRHnCWSy_O1XfDaFT9uE-jYqDAtrpkp49350 | |||||
| url: ${sys.baseUrl}/f/wx/oauth2 | |||||
| @@ -62,6 +62,18 @@ | |||||
| <version>2.0.5</version> | <version>2.0.5</version> | ||||
| </dependency> | </dependency> | ||||
| <dependency> | |||||
| <groupId>com.aliyun</groupId> | |||||
| <artifactId>tea-console</artifactId> | |||||
| <version>0.0.1</version> | |||||
| </dependency> | |||||
| <dependency> | |||||
| <groupId>com.aliyun</groupId> | |||||
| <artifactId>dyvmsapi20170525</artifactId> | |||||
| <version>3.0.0</version> | |||||
| </dependency> | |||||
| <dependency> | <dependency> | ||||
| <groupId>com.alibaba</groupId> | <groupId>com.alibaba</groupId> | ||||
| <artifactId>fastjson</artifactId> | <artifactId>fastjson</artifactId> | ||||
| @@ -89,6 +101,7 @@ | |||||
| <filtering>true</filtering> | <filtering>true</filtering> | ||||
| </resource> | </resource> | ||||
| </resources> | </resources> | ||||
| <finalName>sms-msg-sender</finalName> | |||||
| <plugins> | <plugins> | ||||
| <plugin> | <plugin> | ||||
| <groupId>org.springframework.boot</groupId> | <groupId>org.springframework.boot</groupId> | ||||
| @@ -0,0 +1,4 @@ | |||||
| docker build -t dg-sms-sender:latest . | |||||
| docker login --username=缔智元2023 --password=digimeta@2023 registry.cn-beijing.aliyuncs.com | |||||
| docker tag $(docker images | grep dg-sms-sender | head -1 | awk '{print $3}') registry.cn-beijing.aliyuncs.com/digimeta-common/sms-sender:latest | |||||
| docker push registry.cn-beijing.aliyuncs.com/digimeta-common/sms-sender:latest | |||||
| @@ -0,0 +1,19 @@ | |||||
| package com.lecoo.wechat.config; | |||||
| import lombok.Data; | |||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
| import org.springframework.stereotype.Component; | |||||
| /** | |||||
| * sms properties | |||||
| */ | |||||
| @Data | |||||
| @Component | |||||
| @ConfigurationProperties(prefix = "sys.vms") | |||||
| //@NacosConfigurationProperties(prefix = "sys.mms", dataId = "ali-sms",type = ConfigType.YAML, groupId = "DEFAULT_GROUP", autoRefreshed = true) | |||||
| public class VmsProperties { | |||||
| private String accessKeyId; | |||||
| private String accessKeySecret; | |||||
| private String endpoint; | |||||
| } | |||||
| @@ -2,9 +2,12 @@ package com.lecoo.wechat.controller; | |||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.aliyun.dysmsapi20170525.models.SendSmsResponse; | import com.aliyun.dysmsapi20170525.models.SendSmsResponse; | ||||
| import com.aliyun.dyvmsapi20170525.models.SingleCallByTtsResponse; | |||||
| import com.lecoo.wechat.entity.SmsReqEntity; | import com.lecoo.wechat.entity.SmsReqEntity; | ||||
| import com.lecoo.wechat.entity.VmsReqEntity; | |||||
| import com.lecoo.wechat.entity.WxMsgReqEntity; | import com.lecoo.wechat.entity.WxMsgReqEntity; | ||||
| import com.lecoo.wechat.service.SmsService; | import com.lecoo.wechat.service.SmsService; | ||||
| import com.lecoo.wechat.service.VmsService; | |||||
| import com.lecoo.wechat.utils.SendUtil; | import com.lecoo.wechat.utils.SendUtil; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -22,13 +25,14 @@ public class IndexController { | |||||
| @Autowired | @Autowired | ||||
| SmsService smsService; | SmsService smsService; | ||||
| @Autowired | |||||
| VmsService vmsService; | |||||
| @RequestMapping(value = "/sendMsg", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") | @RequestMapping(value = "/sendMsg", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") | ||||
| public JSONObject sendMsg(@RequestBody WxMsgReqEntity wxMsgReqEntity) { | public JSONObject sendMsg(@RequestBody WxMsgReqEntity wxMsgReqEntity) { | ||||
| JSONObject json = wxMsgReqEntity.toJson(); | JSONObject json = wxMsgReqEntity.toJson(); | ||||
| System.err.println(json); | System.err.println(json); | ||||
| JSONObject result = new JSONObject(); | JSONObject result = new JSONObject(); | ||||
| result.put("status", 0); | result.put("status", 0); | ||||
| result.put("message", "send success!"); | result.put("message", "send success!"); | ||||
| @@ -71,4 +75,32 @@ public class IndexController { | |||||
| System.err.println("send sms end..."); | System.err.println("send sms end..."); | ||||
| return result; | return result; | ||||
| } | } | ||||
| @RequestMapping(value = "/sendVms", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") | |||||
| public JSONObject sendVms(@RequestBody VmsReqEntity vmsReqEntity) { | |||||
| System.err.println("receive a new req for send vms"); | |||||
| JSONObject result = new JSONObject(); | |||||
| result.put("status", 0); | |||||
| result.put("message", "send success!"); | |||||
| System.err.println(vmsReqEntity.toJson().toJSONString()); | |||||
| try { | |||||
| SingleCallByTtsResponse resp = vmsService.sendVms(vmsReqEntity.getTtsCode(), vmsReqEntity.getPhone()); | |||||
| System.err.println(resp.getBody().getMessage()); | |||||
| System.err.println(resp.getBody().getCode()); | |||||
| if (resp.getBody().code.equalsIgnoreCase("ok")) { | |||||
| return result; | |||||
| } else { | |||||
| result.put("status", -1); | |||||
| result.put("message", resp.getBody().getMessage()); | |||||
| return result; | |||||
| } | |||||
| } catch (Exception e) { | |||||
| result.put("status", -1); | |||||
| result.put("message", e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| System.err.println(result.toJSONString()); | |||||
| System.err.println("send vms end..."); | |||||
| return result; | |||||
| } | |||||
| } | } | ||||
| @@ -1,11 +1,9 @@ | |||||
| package com.lecoo.wechat.entity; | package com.lecoo.wechat.entity; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.lecoo.wechat.utils.JsonUtils; | |||||
| import lombok.Data; | import lombok.Data; | ||||
| import javax.validation.constraints.NotBlank; | import javax.validation.constraints.NotBlank; | ||||
| import java.util.Map; | |||||
| @Data | @Data | ||||
| public class SmsReqEntity { | public class SmsReqEntity { | ||||
| @@ -0,0 +1,37 @@ | |||||
| package com.lecoo.wechat.entity; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import lombok.Data; | |||||
| import javax.validation.constraints.NotBlank; | |||||
| @Data | |||||
| public class VmsReqEntity { | |||||
| @NotBlank(message = "phone不能为空") | |||||
| private String phone; | |||||
| @NotBlank(message = "ttsCode不能为空") | |||||
| private String ttsCode; | |||||
| private String dataMap; | |||||
| public JSONObject toJson(){ | |||||
| JSONObject json = new JSONObject(true); | |||||
| json.put("phone", phone); | |||||
| json.put("tssCode", ttsCode); | |||||
| if(dataMap!= null && dataMap.length() > 0){ | |||||
| JSONObject jsonObject = JSONObject.parseObject(dataMap); | |||||
| jsonObject.forEach((key, item)->{ | |||||
| json.put(key, item); | |||||
| }); | |||||
| } | |||||
| return json; | |||||
| } | |||||
| public String mapToString(){ | |||||
| JSONObject jsonObject = JSONObject.parseObject(dataMap); | |||||
| return jsonObject ==null ? "" : jsonObject.toJSONString(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,74 @@ | |||||
| package com.lecoo.wechat.service; | |||||
| import com.aliyun.dyvmsapi20170525.Client; | |||||
| import com.aliyun.dyvmsapi20170525.models.SingleCallByTtsRequest; | |||||
| import com.aliyun.dyvmsapi20170525.models.SingleCallByTtsResponse; | |||||
| import com.aliyun.tea.TeaException; | |||||
| import com.aliyun.teautil.models.RuntimeOptions; | |||||
| import com.lecoo.wechat.config.VmsProperties; | |||||
| import lombok.AllArgsConstructor; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Component; | |||||
| /** | |||||
| * spring sms 工具类 | |||||
| * | |||||
| * @author xueyi | |||||
| **/ | |||||
| @Component | |||||
| @AllArgsConstructor | |||||
| @SuppressWarnings(value = {"unchecked", "rawtypes"}) | |||||
| public class VmsService { | |||||
| @Autowired | |||||
| private VmsProperties vmsProperties; | |||||
| public com.aliyun.dyvmsapi20170525.Client createClient() throws Exception { | |||||
| System.err.println(vmsProperties.getAccessKeyId()); | |||||
| System.err.println(vmsProperties.getAccessKeySecret()); | |||||
| com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() | |||||
| // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 | |||||
| .setAccessKeyId(vmsProperties.getAccessKeyId()) | |||||
| // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 | |||||
| .setAccessKeySecret(vmsProperties.getAccessKeySecret()); | |||||
| // Endpoint 请参考 https://api.aliyun.com/product/Dyvmsapi | |||||
| config.endpoint = vmsProperties.getEndpoint(); | |||||
| return new com.aliyun.dyvmsapi20170525.Client(config); | |||||
| } | |||||
| public SingleCallByTtsResponse sendVms(String ttsCode, String calledNumber) throws Exception { | |||||
| System.err.println("calledNumber:" + calledNumber); | |||||
| System.err.println("ttsCode:" + ttsCode); | |||||
| Client client = this.createClient(); | |||||
| SingleCallByTtsRequest singleCallByTtsRequest = new com.aliyun.dyvmsapi20170525.models.SingleCallByTtsRequest() | |||||
| .setTtsCode(ttsCode) | |||||
| .setCalledNumber(calledNumber); | |||||
| RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); | |||||
| SingleCallByTtsResponse resp = null; | |||||
| try { | |||||
| // 复制代码运行请自行打印 API 的返回值 | |||||
| resp = client.singleCallByTtsWithOptions(singleCallByTtsRequest, runtime); | |||||
| } catch (TeaException error) { | |||||
| // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 | |||||
| // 错误 message | |||||
| System.out.println(error.getMessage()); | |||||
| // 诊断地址 | |||||
| System.out.println(error.getData().get("Recommend")); | |||||
| } catch (Exception _error) { | |||||
| System.out.println(_error.getMessage()); | |||||
| TeaException error = new TeaException(_error.getMessage(), _error); | |||||
| // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 | |||||
| // 错误 message | |||||
| System.out.println(error.getMessage()); | |||||
| // 诊断地址 | |||||
| // System.out.println(error.getData().get("Recommend")); | |||||
| } | |||||
| return resp; | |||||
| } | |||||
| } | |||||
| @@ -1,20 +1,10 @@ | |||||
| server: | server: | ||||
| port: 9950 | port: 9950 | ||||
| nacos: | |||||
| config: | |||||
| server-addr: 127.0.0.1:8848 | |||||
| # namespace: 6d0ee265-2a92-44cc-a6de-f34b3ea104e6 | |||||
| enabled: true | |||||
| file-extension: yaml | |||||
| blocking-queue-size: 5000 | |||||
| sys: | sys: | ||||
| baseUrl: http://dev.hjkjg.top | baseUrl: http://dev.hjkjg.top | ||||
| mms: | mms: | ||||
| url: http://192.168.10.119:9950 | |||||
| receptionPhones: 18910801519 | receptionPhones: 18910801519 | ||||
| # accessKeyId: LTAI5tR67Z2jD21XdjZppe2E | |||||
| # accessKeySecrect: 1q8QkQEzc8UZ3JmH8nt73tP1etO5Px | |||||
| accessKeyId: LTAI5tBxoXcHTkMZv1jUwCT8 | accessKeyId: LTAI5tBxoXcHTkMZv1jUwCT8 | ||||
| accessKeySecrect: E8i2eWczpxOIcYGtX9D0lNJtHApmh2 | accessKeySecrect: E8i2eWczpxOIcYGtX9D0lNJtHApmh2 | ||||
| endpoint: dysmsapi.aliyuncs.com | endpoint: dysmsapi.aliyuncs.com | ||||
| @@ -30,7 +20,10 @@ sys: | |||||
| defaultRemindTemplate: SMS_460715556 | defaultRemindTemplate: SMS_460715556 | ||||
| visitorTemplate: SMS_461045124 | visitorTemplate: SMS_461045124 | ||||
| robotName: 小酷 | robotName: 小酷 | ||||
| vms: | |||||
| accessKeyId: LTAI5tBxoXcHTkMZv1jUwCT8 | |||||
| accessKeySecret: E8i2eWczpxOIcYGtX9D0lNJtHApmh2 | |||||
| endpoint: dyvmsapi.aliyuncs.com | |||||
| wx: | wx: | ||||
| mp: | mp: | ||||
| useRedis: false | useRedis: false | ||||
| @@ -46,18 +39,3 @@ wx: | |||||
| regAuditTemplateId: RYDfkUjIRHnCWSy_O1XfDaFT9uE-jYqDAtrpkp49350 | regAuditTemplateId: RYDfkUjIRHnCWSy_O1XfDaFT9uE-jYqDAtrpkp49350 | ||||
| url: ${sys.baseUrl}/f/wx/oauth2 | url: ${sys.baseUrl}/f/wx/oauth2 | ||||
| spring: | |||||
| application: | |||||
| name: sms-msg-sender # 业务服务的名称,用于注册到nacos中 | |||||
| cloud: | |||||
| nacos: | |||||
| discovery: | |||||
| server-addr: 127.0.0.1:18848 # nacos的服务地址 | |||||
| config: | |||||
| server-addr: 127.0.0.1:18848 # nacos的配置地址 | |||||
| file-extension: yml # 配置文件扩展名,默认为yml | |||||
| data-id: ali-sms.yml # 配置文件名称,可以自定义 | |||||