设计与封装第三方短信接口的问题

2017-11-07 20:31:43 +08:00
 doggg

最近在工作中,公司( Java 系)使用的某一短信平台偶有问题。而且短信的代码有很久的历史包袱,上司叫我重构短信部分的代码。

现在接入的短信平台典型有阿里云,云片,互亿无线,还有一些不准备充钱但还有余额的就不列出来了。

上司希望我能处理好短信发送失败能切换渠道尽力尝试,国际短信,以及发送结果回调的处理。

这几天最烧脑袋的还是软件设计的问题。

不同的短信渠道处理方式不太一样,比如阿里只能通过 templateCode (模板代码)与模板参数发短信,而互亿无线则需要把短信全部拼接成字符串上传(对方会根据内容识别已审核的模板),而云片则支持两种方式。

而不同渠道所需要的方法参数也是不一样的。

所以简单设计一个 interface 再实现是行不通的。

public interface SendSms {
    void send(xxx);
}

在这里问各位 v 友怎么优雅地抽象封装国内大部分短信 API 接口。

谢谢

3210 次点击
所在节点    程序员
7 条回复
xem
2017-11-07 23:02:37 +08:00
不管渠道怎么要求,你一律使用短信模板,做好各个渠道映射就 ok 了
m939594960
2017-11-07 23:07:42 +08:00
php 实现
m939594960
2017-11-07 23:11:37 +08:00
sendSms(13010000000,'reg',['code'=>'123456','name'=>'赵 XX'])


配置文件
return [
yupian => [
type=> 'template'
template=>[reg=>'SMS_001'],

],
aliyun => [
type => 'content',
template => [reg=>'恭喜{name}你注册成功注册码{code}']
]
]
xjp
2017-11-08 00:24:01 +08:00
不要统一封装了 每种渠道写一个 再外层把所有渠道包裹起来对外提供一个接口就可以了
dorothyREN
2017-11-08 09:10:07 +08:00
老哥。还需要短信接口吗
doggg
2017-11-08 09:21:04 +08:00
@xem 这个真不行。

@m939594960 @xjp 谢谢

@dorothyREN 不用哦

所以看起来还是把登录和注册的验证码独立抽成两个方法,其他营销短信另说。方法入参只提供手机号和验证码。具体的实现由另外写了。想不出其他更好的办法
danielmiao
2017-11-08 11:45:42 +08:00
创建内部短信模板,给内部服务调用
针对每个渠道商建立不同的 adapt,做好映射关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/404418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX