• 请不要在回答技术问题时复制粘贴 AI 生成的内容
doggg
V2EX  ›  程序员

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

  •  
  •   doggg ·
    vm-001 · Nov 7, 2017 · 3706 views
    This topic created in 3137 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    public interface SendSms {
        void send(xxx);
    }
    

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

    谢谢

    7 replies    2017-11-08 11:45:42 +08:00
    xem
        1
    xem  
       Nov 7, 2017
    不管渠道怎么要求,你一律使用短信模板,做好各个渠道映射就 ok 了
    m939594960
        2
    m939594960  
       Nov 7, 2017
    php 实现
    m939594960
        3
    m939594960  
       Nov 7, 2017
    sendSms(13010000000,'reg',['code'=>'123456','name'=>'赵 XX'])


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

    ],
    aliyun => [
    type => 'content',
    template => [reg=>'恭喜{name}你注册成功注册码{code}']
    ]
    ]
    xjp
        4
    xjp  
       Nov 8, 2017 via iPhone
    不要统一封装了 每种渠道写一个 再外层把所有渠道包裹起来对外提供一个接口就可以了
    dorothyREN
        5
    dorothyREN  
       Nov 8, 2017
    老哥。还需要短信接口吗
    doggg
        6
    doggg  
    OP
       Nov 8, 2017
    @xem 这个真不行。

    @m939594960 @xjp 谢谢

    @dorothyREN 不用哦

    所以看起来还是把登录和注册的验证码独立抽成两个方法,其他营销短信另说。方法入参只提供手机号和验证码。具体的实现由另外写了。想不出其他更好的办法
    danielmiao
        7
    danielmiao  
       Nov 8, 2017
    创建内部短信模板,给内部服务调用
    针对每个渠道商建立不同的 adapt,做好映射关系
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5276 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 03:46 · PVG 11:46 · LAX 20:46 · JFK 23:46
    ♥ Do have faith in what you're doing.