java语言下短信接入,浅谈各种第三方

1.闲谈

    学java的,初期是最苦逼的,和黑客根本就是两码事,不能入侵系统、也写不了脚本外挂,甚至电脑上运行的桌面软件都写不出来,整天对着编辑器的黑框框,输入输出一些字符串,就算学到了web,也是给前端传递、接收json串,时间长了,感觉就是在搬砖,完全没有以前认为的程序员该有的样子。

    直到第三方接入的出现,才让人感觉有点程序员的意思了,短信是我们经常接触的东西,所以今天写下短信的接入。

2.关于接入

   发送短信,国内跑不了移动联通电信三巨头,但小公司直接对接这三家企业,先不说有没有这个渠道,只算成本就没得玩,费时费力。

    还好各种互联网巨头,如阿里、腾讯、百度,都在自己家云平台上提供了对应的第三方短信接入的接口,省去了直接对接三巨头的成本,小流量的企业,一年到头几百块可能都用不完。

    当然除了bat等巨头,也有专门做短信接口的企业,如创蓝、秒滴之类,不说质量怎么样,但足见接入第三方,比自己企业直接接入移动联通电信要受欢迎的多,也是java程序员需要掌握的主流业务技术之一。

    目前市面上,阿里云的短信平台已经成了主流,安全稳定、企业大、短时间没有倒闭风险,加上许多中小企业的服务器都用的阿里云,所以阿里云的短信是企业的不二选择。

    不过今天我讲的例子不是阿里云,原因无他,相较于其他短信接入略为复杂(也可能是我们公司之前写的太乱了,我没怎么看,如果有误,见谅),其实都是无病呻吟的业务包装,无论短信,还是支付,亦或者推送,再或者微信公众号的开发,在我眼里没有任何区别。

     说白了就是拼接json串或者xml,向对应接口发送请求,然后获取回执码,看状态。

     权限校验是拼接的json串或者xml里面的参数之一,无非什么appid、token之类。

     支付也不过多了一层加密,把关键参数转成RSA,多了个回调接口,看支付是否成功,成功增加对应货币数量,或者购买成功之类的。

      上面的是核心,所有的第三方几乎都绕不过去,大部分几乎都是http请求,简直和前端调后台接口没什么两样,无非角色转变,是我们后台发送请求罢了。

3.秒滴短信

     为什么选择秒滴短信,这里无非是方便入门,新手友好,最关键的是,新人注册有10块钱本金,足够上百条短信发送了,方便入门者的使用。

    我这不是打广告,各公司实际用什么短信,还是由经理决定,程序员又没有决定权,而且其他短信也大同小异,甚至别的第三方都逃不出上面红字的范围,所谓一门通、百门精,放在这里说,最合适不过了。 

   一:首先,打开对应短信方的官网平台,这用秒滴为例。

          无论什么第三方平台,我们第一眼要锁定开发者字样,比如下面的开发者中心,点进去。

           

         我们会看到

    

         这时候其他的东西对我们来说无所谓,接入指引的参数,让经理申请好给你,就 ACCOUT SID 和 AUTH TOKEN,一般都是经理申请,自己用的话,根据指引来,这不是技术点,也没有难度,无非点点点。

       直接锁定API字样的选项,这里就是HTTPS API,也就是接口文档。

这里提供了三种短信方式,其实都一样,这里我们选择用的最多的短信验证码来做示范。

二:正式接入

     点进验证码通知短信,右侧会出现接口文档,从上到下   

     请求地址    https://api.miaodiyun.com/20150822/industrySMS/sendSMS  这个是我们发送请求的地址,固定参数不变的

     请求方式    POST    没什么说的

     编码格式    UTF-8    国内编码跑不出 utf-8

     响应格式    JSON,XML  一般说用json  除了微信支付这个nc设计,我还没见过哪家用xml这种反人类设置的

     请求包头    Content-type:application/x-www-form-urlencoded  这个设置的没什么说的

请求参数说明  

                      

         关键部分,就是这堆参数 

          1.是按流程申请的一个权限账号id,用户身份识别的,问经理要,或者自己按流程申请

          2.则是按流程申请的模板,申请来的模板直接填进去就好

          3.申请的模板的主键参数 没什么可说的 可填可不填

          4.可选 在2只填写模板的情况下 3放入替换变量的 值,比如说验证码,或者直接在2中放入所有数据

          5.必选项 手机号  给那台手机号发送短信  就填哪个

          6.不填 没意义

          7.必选 放个对应格式的时间进去就行了 java格式时间还是很方便的

          8.必选项 验证身份的  就是把身份id  token  和 时间戳 拼接起来 md5加密  对方同样加密然后判断是否相等 相等通过校验

          9.可选  加不加无所谓 反正默认返回json 加上免得出事故  json比较好用

      请求实例

          

 

         这里验证了我说的话  无非就是拼接一些参数 发送到对应接口 获取数据 判断是否成功,难点在于各个参数各种加密啦,获取了罢了,第三方没有什么大不了的。

返回参数说明

         这个看源文档吧  就是返回的json带的数据 判断一下状态码 是什么状态

      返回示例

         同样的 不贴了 看源文档。

4.总结

     还是那句话 , 无论什么第三方,都是拼接他们要求的各种参数,然后发送到指定服务器接口也就是url,获取回执信息,根据官方状态码,判断是否成功。

      难点在于各种文档很乱 , 参数拿的不对,最nc还是微信支付,跨两个平台,参数要从两个平台取,简直nc。

5.DEMO 

      按习惯放个demo

       

    public  void sendSms(String phone,String tplId,String params){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            String timestamp = sdf.format(new Date());
            String sig = MD5Util.getMD5(Constants.MDSMS_ACCOUNT_SID +Constants.MDSMS_AUTH_TOKEN +timestamp);
            String url = Constants.MDSMS_REST_URL +operation;
            Map<String,String> map = new HashMap<>();
            map.put("accountSid",Constants.MDSMS_ACCOUNT_SID);
            map.put("to",phone);
            map.put("templateid",tplId);
            map.put("param",params);
            map.put("timestamp",timestamp);
            map.put("sig",sig);
            map.put("respDataType","json");
            String result = HttpUtil.post(url,map);
            JSONObject jsonObject = JSON.parseObject(result);
            if(!jsonObject.getString("respCode").equals("00000")){
                log.error("fail to send sms to "+phone+":"+params+":"+result);
            }
        } catch (Exception e) {
            log.error("fail to send sms to "+phone+":"+params);
        }
    }

      上面的HttpUtil是请求发送工具, 参考我的这篇博文: https://blog.csdn.net/soulsda/article/details/86511465

     json是fastjson的jar包处理,自行百度,国内不用fastjson的反而少见,我这里不多讲,

     MD5Util 是md5加密算法,网上一大把,我也不多赘述,

     Constants 是我一个工具类 就是放各种参数的 根据名字清晰看到是token 和 sid 之类的 按自己申请的替换掉就行

    如果有人没怎么看懂,欢迎留言,我看到会详细解答的。

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值