栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

短信sdk:使用阿里云短信sdk

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

短信sdk:使用阿里云短信sdk

背景

项目要求短信验证,先说思路。
1.调用阿里云短信sdk或其他厂商短信sdk
2.将随机验证码保存 (可以保存到redis或mysql之类的,设置一个失效时间。 )
3.用户输入验证码说 和保存的验证码进行比较。 看是否一致,如果一致删除保存的验证码,不一致就返回验证失败。

pom 引入
!--  同步---->

            com.aliyun
            dysmsapi20170525
            2.0.9
        
        !--  异步--->
        
            com.aliyun
            alibabacloud-dysmsapi20170525
            1.0.1
        
配置文件如下
aliyun.access-key-id=你的key
aliyun.access-key-secret=你的keySecret
aliyun.endpoint=dysmsapi.aliyuncs.com
aliyun.region= cn-hangzhou
#阿里云短信
aliyun.note.sign-name=阿里云短信测试
aliyun.note.template-code=SMS_154950909
编写配置文件
@Configuration
@ConfigurationProperties(prefix = "aliyun")
@Setter
@Getter
public class AliyunSendNoteConfig {
    private String accessKeyId;
    private String accessKeySecret;
    private String endpoint="dysmsapi.aliyuncs.com";
    private String region="cn-hangzhou";

}
创建config
@Configuration
public class AliyunClientConfig {


    @Resource
    private AliyunSendNoteConfig aliyunSendNoteConfig;
    
    @Bean
    public  com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
        Config config = new Config()
                // 您的 AccessKey ID
                .setAccessKeyId(aliyunSendNoteConfig.getAccessKeyId())
                // 您的 AccessKey Secret
                .setAccessKeySecret(aliyunSendNoteConfig.getAccessKeySecret());
        // 访问的域名
        config.endpoint = aliyunSendNoteConfig.getEndpoint();
        return new com.aliyun.dysmsapi20170525.Client(config);
    }
    
    @Bean
    public  AsyncClient createAsyncClient() throws Exception {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(aliyunSendNoteConfig.getAccessKeyId())
                .accessKeySecret(aliyunSendNoteConfig.getAccessKeySecret())
                //.securityToken("") // use STS token
                .build());
        return   AsyncClient.builder()
                .region(aliyunSendNoteConfig.getRegion())
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride(aliyunSendNoteConfig.getEndpoint())
                        //.setReadTimeout(Duration.ofSeconds(30))
                )
                .build();
    }

}

编写service 基类接口
    boolean syncSendMsg(String phoneNumber,String signName,String templateCode,
                    String code,String outId);

    
    void asyncSendMsg(String phoneNumber,String signName,String templateCode,
                        String code,String outId);

阿里云短信接口
public interface AliyunSendMsgBaseService extends  SendMsgBaseService{
}

实现阿里云短信接口
@Service
public class AliyunSendMsgServiceImpl implements AliyunSendMsgBaseService {

    @Resource
    private com.aliyun.dysmsapi20170525.Client client;

    @Resource
    private com.aliyun.sdk.service.dysmsapi20170525.AsyncClient asyncClient;

    @Override
    public boolean syncSendMsg(String phoneNumber,String signName,String templateCode, String code,String outId) {
        HashMap templateMaps = Maps.newHashMap();
        templateMaps.put("code",code);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName(signName)
                .setTemplateCode(templateCode)
                .setPhoneNumbers(phoneNumber)
                .setTemplateParam(GsonUtil.object2String(templateMaps));
        if(StringUtils.hasLength(outId))sendSmsRequest.setOutId(outId);
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            if(sendSmsResponse != null) {
                return SEND_MSG_SUCCESS.equals(sendSmsResponse.getBody().code);
            }
        } catch (TeaException error) {
            // 如有需要,请打印 error
            error.printStackTrace();
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            // 如有需要,请打印 error
            _error.printStackTrace();
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
        return false;
    }

    @Override
    public void asyncSendMsg(String phoneNumber, String signName, String templateCode, String code, String outId) {
        HashMap templateMaps = Maps.newHashMap();
        templateMaps.put("code",code);
        com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest.Builder builder = com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest.builder()
                .signName(signName)
                .templateCode(templateCode)
                .phoneNumbers(phoneNumber)
                .templateParam(GsonUtil.object2String(templateMaps));
        if(StringUtils.hasLength(outId))builder.outId(outId);
        // Asynchronously get the return value of the API request
        asyncClient.sendSms(builder.build());
    }


}
调用发送短信接口
//验证码 可以是4位或6位的随机数
String code= "1234"
sendMsgBaseService.syncSendMsg(phoneNumber, aliYunNoteConfig.getSignName(),
                aliYunNoteConfig.getTemplateCode(), code, null)
验证

交流群

java交流群: 868794080

源码资料

源码资料

参考资料

阿里云短信sdk

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980687.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号