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

目录

SMS

环境调试

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

调试短信验证码功能

实战开发 

封装组件

对外接口

调用演示


SMS


环境调试

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

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

 阿里云-计算,为了无法计算的价值阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。免费备案,7x24小时售后支持,助企业无忧上云。icon-default.png?t=N7T8https://www.aliyun.com/

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

c)点击购买更多

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

这样就购买成功了.

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

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

调试短信验证码功能

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

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

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

实战开发 

封装组件

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

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

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 = "https://dfsns.market.alicloudapi.com";
        String path = "/data/send_sms";
        String method = "POST";
        String appcode = "91dasjhfk75e0574afdajsf82g3r3bf923r";
        Map<String, String> 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<String, String> querys = new HashMap<>();
        Map<String, String> 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<Int> {
        //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:对于验证码接口防刷,这里可以根据不同需求,做得很复杂

调用演示

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

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

在Android Studio中实现手机号验证码登录功能,可以通过阿里云的短信服务来完成。以下是一个简单的步骤指南: ### 步骤一:准备工作 1. **注册阿里云账号**:如果没有阿里云账号,先注册一个。 2. **开通短信服务**:登录阿里云控制台,开通短信服务。 3. **创建应用**:在短信服务中创建一个应用,并获取AppKey和AppSecret。 ### 步骤二:配置Android Studio项目 1. **添加依赖**:在项目的`build.gradle`文件中添加阿里云短信服务的依赖。 ```groovy dependencies { implementation 'com.aliyun:aliyun-dysms-sdk:1.1.0' } ``` 2. **配置权限**:在`AndroidManifest.xml`中添加必要的权限。 ```xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` ### 步骤三:实现发送验证码功能 1. **编写发送短信的代码**: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; public class SMSUtils { private static final String REGION_ID = "cn-hangzhou"; private static final String PRODUCT = "Dysmsapi"; private static final String DOMAIN = "dysmsapi.aliyuncs.com"; public static SendSmsResponse sendSms(String phoneNumber, String code) throws ClientException { IClientProfile profile = DefaultProfile.getProfile(REGION_ID, "your_access_key_id", "your_access_key_secret"); DefaultProfile.addEndpoint(REGION_ID, PRODUCT, DOMAIN); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(phoneNumber); request.setSignName("your_sign_name"); request.setTemplateCode("your_template_code"); request.setTemplateParam("{\"code\":\"" + code + "\"}"); return client.getAcsResponse(request); } } ``` 2. **调用发送短信的代码**: ```java new Thread(new Runnable() { @Override public void run() { try { SendSmsResponse response = SMSUtils.sendSms("phone_number", "verification_code"); // 处理发送结果 } catch (ClientException e) { e.printStackTrace(); } } }).start(); ``` ### 步骤四:实现验证码验证功能 1. **编写验证验证码的代码**: ```java public boolean verifyCode(String phoneNumber, String inputCode) { // 从服务器获取存储的验证码 String storedCode = getStoredCode(phoneNumber); return storedCode.equals(inputCode); } private String getStoredCode(String phoneNumber) { // 从服务器获取验证码实现 return "stored_code"; } ``` 2. **调用验证验证码的代码**: ```java boolean isValid = verifyCode("phone_number", "input_code"); if (isValid) { // 登录成功 } else { // 登录失败 } ``` ### 总结 通过以上步骤,你可以在Android Studio中实现手机号验证码登录功能。具体的实现细节可能需要根据你的项目需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈亦康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值