目录

SMS

环境调试

阿里云云市场中购买第三方短信服务

调试短信验证码功能

实战开发 

封装组件

对外接口

调用演示


SMS


环境调试

从阿里云云市场中购买第三方短信服务

a)进入阿里云首页,然后从云市场中找到 “短信” (一定要从 云市场 去找短信服务,否则需要企业证明,备案) 

 阿里云-计算,为了无法计算的价值阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。免费备案,7×24小时售后支持,助企业无忧上云。SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图http://www.aliyun.com/

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(1)

b)然后任意挑选一个合适的短信服务(这里以一个为例)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(2)

c)点击购买更多

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(3)

d)然后按照自己的需求购买(还是有很多可以白嫖的)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(4)

这样就购买成功了.

e)之后你就可以在控制台里搜索 “云市场”,找到你购买的服务

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(5)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(6)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(7)

Ps:将来使用短信服务给手机发送验证码时,就需要指定上面个的 AppCode(千万不可泄漏,防止别人乱刷)

调试短信验证码功能

a)进入你购买的服务后,找到 API 接口,点击 “去调试”

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(8)

b) 如下界面(用到的参数都可以参照 “商品介绍” 中的描述)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(9)

c)调整参数,点击发送请求,随后返回响应,显示 “ok”,说明调试成功(此时你就可以看到发送到你手机上的验证码了). 

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(10)

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(11)

实战开发 

封装组件

a)复制请求示例中的所有代码,粘贴到你的项目中

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(12)

b)按照注释中的内容去引入对应的依赖和工具类

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(13)

c)建议将短信服务专门到一个微服务中(专门用例处理调用第三方服务的接口),将来其他服务需要使用时,进行远程调用接口,解耦合(不要跟我张口闭口性能优化…).

import org.apache.http.HttpResponse;
import org.cyk.gulimall.third.infra.HttpUtils;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;

@Component
public class SmsComponent {

    /**
     * 这里的 host、pat、method、appcode 可以配置到配置文件中,但是没必要
     * 因为将来如果真要换另一个企业的短信服务,接口的需要的参数变化都还是挺大的,所以基本没有复用的必要
     * code: 验证码
     * phone: 手机号
     */
    public void sendMsg(String code, String phone) {
        String host = "http://dfsns.market.alicloudapi.com";
        String path = "/data/send_sms";
        String method = "POST";
        String appcode = "91dasjhfk75e0574afdajsf82g3r3bf923r";
        Map headers = new HashMap();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        Map querys = new HashMap();
        Map bodys = new HashMap();
        bodys.put("content", "code:" + code);
        bodys.put("template_id", "CST_ptdie100");  //注意,CST_ptdie100该模板ID仅为调试使用,调试结果为"status": "OK" ,即表示接口调用成功,然后联系客服报备自己的专属签名模板ID,以保证短信稳定下发
        bodys.put("phone_number", phone);
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            System.out.println(response.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

对外接口

@RestController
@RequestMapping("/auth/sms")
class SmsApi(
    val thirdSmsRpcService: ThirdSmsRpcService,
    val redisTemplate: StringRedisTemplate,
) {

    @GetMapping("/send_code/{phone}")
    fun sendCode(
        @PathVariable("phone") phone: String, //此处省略格式校验
    ): ApiResp {
        //1.验证码防刷
        val rCode = redisTemplate.opsForValue().get(SmsRedisKey.getSMSKey(phone))
        rCode?.let { throw AppException(ApiStatus.CODE_GET_FAST, "验证码获取过于频繁!") }
        //2.生成验证码
        //1) 生成 6 位随机数字
        val code = (1..6).joinToString("") { Random().nextInt(0, 10).toString() }
        //2) 保存到 Redis 上
        redisTemplate.opsForValue().set(SmsRedisKey.getSMSKey(phone), code, 1, TimeUnit.MINUTES)
        //3.向手机发送验证码
        thirdSmsRpcService.sendMsg(code, phone)
        return ApiResp.ok(1)
    }

}

Ps:对于验证码接口防刷,这里可以根据不同需求,做得很复杂

调用演示

调用后,手就可以收到以下短信.

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(14)

关于短信的模板,可以去联系客服进行申请.

SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)插图(15)

本站无任何商业行为
个人在线分享-虚灵IT资料分享 » SMS – 基于阿里云实现手机短信验证码登录(无需备案,非测试)
E-->