| | |
| | | package com.ruoyi.common.utils; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.common.config.SmsProperties; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.tencentcloudapi.common.Credential; |
| | | import com.tencentcloudapi.common.exception.TencentCloudSDKException; |
| | | import com.tencentcloudapi.common.profile.ClientProfile; |
| | | import com.tencentcloudapi.common.profile.HttpProfile; |
| | | import com.tencentcloudapi.sms.v20190711.SmsClient; |
| | | import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest; |
| | | import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.annotation.Resource; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | |
| | | |
| | | @Resource |
| | | SmsProperties smsProperties; |
| | | @Resource |
| | | SmsClient smsClient; |
| | | static SmsClient smsClient; |
| | | |
| | | |
| | | public SmsProperties getPro(){ |
| | | public SmsProperties getPro() { |
| | | return smsProperties; |
| | | } |
| | | |
| | | @PostConstruct |
| | | public void createSmsClient() { |
| | | // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId,SecretKey。 |
| | | // 为了保护密钥安全,建议将密钥设置在环境变量中或者配置文件中,请参考凭证管理 https://github.com/TencentCloud/tencentcloud-sdk-java?tab=readme-ov-file#%E5%87%AD%E8%AF%81%E7%AE%A1%E7%90%86。 |
| | | // 硬编码密钥到代码中有可能随代码泄露而暴露,有安全隐患,并不推荐。 |
| | | // SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi |
| | | // Credential cred = new Credential("SecretId", "SecretKey"); |
| | | |
| | | Credential cred = new Credential(smsProperties.getSecretid(), smsProperties.getSecretkey()); |
| | | // 实例化一个http选项,可选的,没有特殊需求可以跳过 |
| | | HttpProfile httpProfile = new HttpProfile(); |
| | | // 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com |
| | | httpProfile.setEndpoint("sms.tencentcloudapi.com"); |
| | | // 实例化一个客户端配置对象 |
| | | ClientProfile clientProfile = new ClientProfile(); |
| | | clientProfile.setHttpProfile(httpProfile); |
| | | // 实例化要请求产品(sms)的client对象,第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 |
| | | smsClient = new SmsClient(cred, "ap-guangzhou", clientProfile); |
| | | } |
| | | |
| | | public boolean sendSms(String phone,String templateId,String[] param){ |
| | | phone = phone.startsWith("+86")?phone:("+86"+phone); |
| | | SendSmsRequest req = new SendSmsRequest(); |
| | | req.setSmsSdkAppid(smsProperties.getAppId()); |
| | | req.setPhoneNumberSet(new String[]{phone}); |
| | |
| | | req.setSessionContext(""); |
| | | req.setExtendCode(""); |
| | | try { |
| | | smsClient.SendSms(req); |
| | | SendSmsResponse sendSmsResponse = smsClient.SendSms(req); |
| | | System.out.println(JSON.toJSONString(sendSmsResponse)); |
| | | return true; |
| | | } catch (TencentCloudSDKException e) { |
| | | log.error("发送短信失败,{},{}",phone,param,e); |