首页 新闻 会员 周边

急!!!需要开发一个适配多服务商的短信服务,求各位大佬提供一下经验或者设计思路,谢谢了!

0
悬赏园豆:200 [已解决问题] 解决于 2021-08-19 17:18

目前具体情况是这样的,我们有一个短信服务模块,此前都是单一的服务商,但是现在需要接入多个不同的服务商,各个服务商提供的接口参数、加签、加密都有些区别,现在需要把这个服务做成适配多服务商的,方便后续的开发维护,各位大佬有没有思路或者办法,还请指教一番!!!多谢各位

Majesity的主页 Majesity | 初学一级 | 园豆:24
提问于:2020-12-15 11:52
< >
分享
最佳答案
0

可以参考一下 使用PHP写的 的 Easy SMS 组件
https://github.com/overtrue/easy-sms
支持目前市面多家服务商
一套写法兼容所有平台
简单配置即可灵活增减服务商
内置多种服务商轮询策略、支持自定义轮询策略
统一的返回值格式,便于日志与监控
自动轮询选择可用的服务商

收获园豆:200
游戏都没味 | 初学一级 |园豆:62 | 2020-12-15 13:43
其他回答(6)
0

用工厂模式

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2020-12-15 13:29
0

传参的时候在之前的基础上加一层映射关系就好了

小小咸鱼YwY | 园豆:3210 (老鸟四级) | 2020-12-15 13:35
0

适配器模式

羽商宫 | 园豆:2490 (老鸟四级) | 2020-12-16 10:21
0

封装接口调用

魔多 | 园豆:1015 (小虾三级) | 2020-12-16 16:15
0

我理解的是你需要把1对1变成多对一。你们是运行商吗?

依米呀 | 园豆:235 (菜鸟二级) | 2020-12-18 10:42

我们不是运营商,只不过有个模块用到多个不同的短信运营商,所以想要做适配

支持(0) 反对(0) Majesity | 园豆:24 (初学一级) | 2020-12-18 13:46

@Majesity: 哦,明白了

支持(0) 反对(0) 依米呀 | 园豆:235 (菜鸟二级) | 2020-12-18 15:12
0

发送适配接口
IMessage
{
sendMessage(MessageRequest MR)
}

供应商A
MessageA :IMessage{
sendMessage(MessageRequest MR){.....}
}

供应商B
MessageB :IMessage{
sendMessage(MessageRequest MR){......}
}

发送工厂
MessageFactory
{
public IMessage getMessage(MessageRequest mr)
{
if (mr == null)
{
return null;
}
if (mr.RequestType == 1)
{
return new MessageA();
}
else if (mr.RequestType == 2)
{
return new MessageB();
}
return null;
}
}

发送短信Model
MessageRequest{
RequestType //商家枚举1商家A,2商家B
RequestSign //签名密钥
RequestUrl //发送短信请求URL
RequestData //发送短信Data
ReturnData //调用后返回数据
Success //发送是否成功
}

Test Code:
MessageRequest mr = new MessageRequest();
mr.RequestType = 1;
mr.RequestUrl = "http://www.baidu.com/xxx";
...................

        MessageFactory mf=new MessageFactory();
        //获取发送对象
        IMessage m = mf.getMessage(mr);

        //调用 发送方法
        m.sendMessage(mr);

以后还有商家C.D.添加MessageC,MessageD即可,再修改MessageFactory类即可,其他代码不用动。。

为乐而来 | 园豆:1432 (小虾三级) | 2021-01-04 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册