当前位置:首页 > 科技  > 软件

使用工厂类实现阿里云、腾讯云及华为云发送短信功能

来源: 责编: 时间:2023-11-06 17:19:24 194观看
导读在Spring Boot中,可以使用工厂类来实现阿里云、腾讯云和华为云的短信发送功能。首先,需要创建一个接口,定义发送短信的通用方法,然后为每个云服务提供具体的实现,最后创建一个工厂类来根据配置选择正确的实现。以下是一个

在Spring Boot中,可以使用工厂类来实现阿里云、腾讯云和华为云的短信发送功能。首先,需要创建一个接口,定义发送短信的通用方法,然后为每个云服务提供具体的实现,最后创建一个工厂类来根据配置选择正确的实现。以下是一个简单的示例:JOV28资讯网——每日最新资讯28at.com

创建一个通用的短信发送接口:JOV28资讯网——每日最新资讯28at.com

public interface SmsSender {    void sendSms(String phoneNumber, String message);}

创建具体的短信发送服务实现类,分别为阿里云、腾讯云和华为云创建实现类。例如,以下是阿里云的实现:JOV28资讯网——每日最新资讯28at.com

@Servicepublic class AliyunSmsSender implements SmsSender {    private final String accessKeyId;    private final String accessKeySecret;    private final String signName;    @Autowired    public AliyunSmsSender(        @Value("${sms.aliyun.accessKeyId}") String accessKeyId,        @Value("${sms.aliyun.accessKeySecret}") String accessKeySecret,        @Value("${sms.aliyun.signName}") String signName    ) {        this.accessKeyId = accessKeyId;        this.accessKeySecret = accessKeySecret;        this.signName = signName;    }    @Override    public void sendSms(String phoneNumber, String message) {        // 使用阿里云的SDK发送短信        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);        IAcsClient client = new DefaultAcsClient(profile);        CommonRequest request = new CommonRequest();        request.setMethod(MethodType.POST);        request.setDomain("dysmsapi.aliyuncs.com");        request.setVersion("2017-05-25");        request.setAction("SendSms");        // 设置短信发送参数        request.putQueryParameter("PhoneNumbers", phoneNumber);        request.putQueryParameter("SignName", signName);        request.putQueryParameter("TemplateCode", "your_template_code");        request.putQueryParameter("TemplateParam", "{/"code/":/"" + message + "/"}");        try {            CommonResponse response = client.getCommonResponse(request);            System.out.println(response.getData());        } catch (ServerException e) {            e.printStackTrace();        } catch (ClientException e) {            e.printStackTrace();        }    }}

腾讯云的实现类JOV28资讯网——每日最新资讯28at.com

@Servicepublic class TencentSmsSender implements SmsSender {    private final String appId;    private final String appKey;    private final String sign;    @Autowired    public TencentSmsSender(        @Value("${sms.tencent.appId}") String appId,        @Value("${sms.tencent.appKey}") String appKey,        @Value("${sms.tencent.sign}") String sign    ) {        this.appId = appId;        this.appKey = appKey;        this.sign = sign;    }    @Override    public void sendSms(String phoneNumber, String message) {        // 使用腾讯云的SDK发送短信        // 实现具体的发送逻辑,参考腾讯云短信SDK文档    }}

华为云的实现类JOV28资讯网——每日最新资讯28at.com

@Servicepublic class HuaweiSmsSender implements SmsSender {    private final String clientId;    private final String clientSecret;    private final String sender;    @Autowired    public HuaweiSmsSender(        @Value("${sms.huawei.clientId}") String clientId,        @Value("${sms.huawei.clientSecret}") String clientSecret,        @Value("${sms.huawei.sender}") String sender    ) {        this.clientId = clientId;        this.clientSecret = clientSecret;        this.sender = sender;    }    @Override    public void sendSms(String phoneNumber, String message) {        // 使用华为云的SDK发送短信        // 实现具体的发送逻辑,参考华为云短信SDK文档    }}

创建一个工厂类,根据配置选择正确的短信发送实现类:JOV28资讯网——每日最新资讯28at.com

@Servicepublic class SmsSenderFactory {    private final AliyunSmsSender aliyunSmsSender;    private final TencentSmsSender tencentSmsSender;    private final HuaweiSmsSender huaweiSmsSender;    @Autowired    public SmsSenderFactory(AliyunSmsSender aliyunSmsSender, TencentSmsSender tencentSmsSender, HuaweiSmsSender huaweiSmsSender) {        this.aliyunSmsSender = aliyunSmsSender;        this.tencentSmsSender = tencentSmsSender;        this.huaweiSmsSender = huaweiSmsSender;    }    public SmsSender getSmsSender(SmsProvider provider) {        switch (provider) {            case ALIYUN:                return aliyunSmsSender;            case TENCENT:                return tencentSmsSender;            case HUAWEI:                return huaweiSmsSender;            default:                throw new IllegalArgumentException("Unsupported SMS provider: " + provider);        }    }}

创建一个枚举类来表示短信服务提供商:JOV28资讯网——每日最新资讯28at.com

public enum SmsProvider {    ALIYUN,    TENCENT,    HUAWEI}

在Spring Boot应用中,配置并注入工厂类,根据配置选择正确的短信服务提供商:JOV28资讯网——每日最新资讯28at.com

# application.properties 中的配置sms.provider=ALIYUN

在服务或控制器中,可以注入SmsSenderFactory,然后根据配置选择合适的短信服务提供商,并使用工厂创建短信发送实例进行发送:JOV28资讯网——每日最新资讯28at.com

@Servicepublic class SmsService {    private final SmsSenderFactory smsSenderFactory;        @Value("${sms.provider}")    private SmsProvider smsProvider;    @Autowired    public SmsService(SmsSenderFactory smsSenderFactory) {        this.smsSenderFactory = smsSenderFactory;    }    public void sendSms(String phoneNumber, String message) {        SmsSender smsSender = smsSenderFactory.getSmsSender(smsProvider);        smsSender.sendSms(phoneNumber, message);    }}

这种方式使您能够轻松切换不同的短信服务提供商,并根据配置选择合适的实现类发送短信。请确保您已在项目中引入相应的云服务SDK,并配置好相关的参数,以便实际发送短信。JOV28资讯网——每日最新资讯28at.com

示例中完整代码,可以从下面网址获取:JOV28资讯网——每日最新资讯28at.com

https://gitee.com/jlearning/wechatdemo.gitJOV28资讯网——每日最新资讯28at.com

https://github.com/icoderoad/wxdemo.gitJOV28资讯网——每日最新资讯28at.com

JOV28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-17262-0.html使用工厂类实现阿里云、腾讯云及华为云发送短信功能

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Gorm 中的迁移指南

下一篇: 使用Gorm进行高级查询

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • 2023 年的 Node.js 生态系统

    2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 本地生活这块肥肉,拼多多也想吃一口

    本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top
Baidu
map