测试短息服务api接口示例代码

流程

  1. 去阿里云上找第三方短信服务api
  2. 拿到购买的短息服务的appcode
  3. 其他参数看你需求,这里就不提供显示了,很简单
  4. 找到api接口 提供的sdk代码
  5. 导入maven和相关的java代码

大概就是下面的样式,具体代码看你买的api提供商

  1. appcode,模板这些参数必须要。服务商提供
  2. phone 你传入的参数
  3. code是验证码,随机生成6位

功能

  1. 先去redis中查验证码
  2. 没有则继续发送 ,发送成功则存入redis中
  3. redis中则直接返回,我这里直接抛异常

注意:这里不需要用@Cacaheable这个注解是配合数据库使用,这里只是做验证码获取,即业务是注册之类的业务,用StringRedisTemplate 来设置key-value和过期时间

@Service
public class ShortServiceImp implements ShortServie {

    @Value("${short.appcode}")
    private  String appcode;

    @Value("${short.smsSignId}")
    private String smsSignId;

    @Value("${short.templateId}")
    private String templateId;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private String shortMessageKey = ConstantProperties.SHORTMESSAGEKEY;
    //发送短信,发送成功返回code验证码存到redis中
    @Override
    public R sendShortMessage(String phone) {

        //防止用户多次点击
        String value = stringRedisTemplate.opsForValue().get(shortMessageKey);
        if(value != null ){
            throw new MyOnlineException(20001,"您的操作太快了,请稍后再试试");
        }

        String host = "https://gyytz.market.alicloudapi.com";
        String path = "/sms/smsSend";
        String method = "POST";
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        Map<String, String> querys = new HashMap<String, String>();
        querys.put("mobile", phone);
        //获取随机6位
        String code = RandomUtil.getSixBitRandom();
        querys.put("param", "**code**:"+code+",**minute**:5");
        querys.put("smsSignId", smsSignId);
        querys.put("templateId", templateId);
        Map<String, String> bodys = new HashMap<String, String>();
        try {
            /**
             * 重要提示如下:
             * HttpUtils请从
             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
             * 下载
             *{
             *   "code": "0",
             *   "msg": "成功"
             * }
             * {
             *     "code":"XXXX",
             *     "msg":"错误提示内容",
             *     "ILLEGAL_WORDS":["XX","XX"]    // 如有则显示
             *      // 1、http响应状态码对照表请参考:https://help.aliyun.com/document_detail/43906.html;
             *      // 2、如果次数用完会返回 403,Quota Exhausted,此时继续购买就可以;
             *      // 3、如果appCode输入不正确会返回 403,Unauthorized;
             * }
             * 1204
             * 签名未报备
             * 请联系客服申请。
             * 1205
             * 签名不可用
             * 签名一般为:公司名简称、产品名、商城名称、网站名称、APP名称、系统名称、公众号、小程序名称等等。不可以是纯数字、电话号码或者无意义的签名,如:【温馨提示】【测试】【你好】等;
             * 1302
             * 短信内容包含敏感词
             * 短信内容包含敏感词
             * 1304
             * 短信内容过长
             * 短信内容实际长度=短信签名+短信内容。(短信计费方式:70字内按1条计费,超出按67字每条计费;一个汉字、数字、字母、符号都算一个字;带变量短信按实际替换后的长度计费)
             * 1320
             * 模板ID不存在
             * 请联系客服申请。
             * 1403
             * 手机号码不正确
             * 手机号码不正确
             * 1905
             * 验证未通过
             * 验证未通过
             * 相应的依赖请参照
             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
             */
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
//            System.out.println(response.toString());
            //获取response的body
            int statusCode = response.getStatusLine().getStatusCode();
            //System.out.println(EntityUtils.toString(response.getEntity()));
            String reasonPhrase = response.getStatusLine().getReasonPhrase();
            //发送成功后,设置过期时间60后,重新发送验证码才有效
            stringRedisTemplate.opsForValue().set("short::messagecode", code, 60L, TimeUnit.SECONDS);
            return  R.ok().data("statusCode",statusCode).data("reasonPhrase",reasonPhrase);
        } catch (Exception e) {
            e.printStackTrace();
            throw new MyOnlineException(20001,e.getMessage());
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手机短消息二次开发接口 简 介 为了对短消息信息应用开发商提供支持,本公司提供了一个高可靠性开发接口,支持用户的短信息定向开发。该接口可运行于任何Windows平台,支持中英文短消息发送接收,支持目前大多数型号的手机。随着手机短信增值业务的发展,我们将不断地增加开发软件包的功能。 通过该短消息开发接口,企业不仅可以将其与自身的MIS系统结合,提高信息处理的实时性,还可以非常容易地建立起自己的短消息中心,用于处理客户投诉、产品推广、广告发布等常用业务,进一步提高工作效率与节省成本。该接口可广泛用于远程控制,电讯,CALL台,电力,教育,广告等行业。 短消息二次开发接口以动态连接库的形式提供,支持所有Windows平台下开发语言,如Visual C++, VB, FoxPro , C++ Builder, Delphi, Power Builder和Lotus Notes等。 接口特点: 接口直接使用手机做为发送设备,无须另外配置设备,减少平台建设成本。 消息的发送与接收采用消息驱动方式,速度快,效率高。 加入状态报告功能,所以接口也适用于实时性与准确性很强的应用。 加入免提短信、发送Logo、发送铃声等功能,使接口个性化味道十足。 接口标准化,函数少,调用简单,使用起来十分方便。 将手机与USB充电线配合,可解决手机供电问题,实现短消息的不间断发送。 应用程序可灵活应用,支持多串口发送方式,适用于大批量消息处理。 适用机型: NOKIA 5110/6110/8810/3210/3310/3330/8210/8250/8850/8310 等机型 Siemens S2588/3508/3518/3568/6688/3618/6688/SL45XX 等机型 其它标准GSM手机 专用短消息发送设备 连接方式: 数据线(NOKIA需要FBUS通讯协议) 红外线 开发接口包含函数:(更详细内容请查看NkiDll.h文件) Sms_Init 初始化串口并与手机连接 Sms_GetMobileName取所连接手机的手机名称或手机型号 Sms_GetIMEI 取所连接手机的手机串口(IMEI) Sms_Send 发送指定的短信,它能自动分段发送,每段信息最大长度为70个字 Sms_SendSmart  发送增值短信,目前仅支持Nokia的图片短信、Logo、分组图片、铃声 Sms_Get 返回接收队列中短信 Sms_Get2 返回接收队列中短信 Sms_GetSimSms   返回手机SIM卡中原已接收到的短消息 Sms_Delete 删除SIM卡中指定的短信记录 Sms_ClearSim   清空Sim卡中原已接收到的短消息 Sms_GetSimNum 取SIM卡短信容量 Sms_GetRecvNum 返回接收队列中短信的数目 Sms_Exit 释放资源,断开串口与手机的连接 开发接口NkiDll.zip包含文件: readme.txt 本文件,短消息开发接口简介 NkiDll.chm 短消息开发接口应用帮助文件 \DLL \NkiDll.h 短消息开发接口头文件 \NkiDll.Lib 短消息开发接口库文件 \NkiDll.Dll 短消息开发接口动态连接库(主要文件) \DemoNkiDll.exe 测试短消息接口的工具 \Example 示例程序与原代码(Visual C++,VB,Power Builder,FoxPro) \Dog 加密狗驱动程序(试用版无需) 广州首易信息技术有限公司

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值