【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)

简介: 【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)

前言

  1. 在网站和移动应用中利用短信验证码进行信息确认是最常用的验证手段。随着短信验证码的技术更新,短信验证码的应用程序也非常多样,如交易确认、授权绑定、登录保护等。 本文用在微信小程序手机号登录
  2. 短信验证码对注册用户的管理更加方便,用户通过手机注册网站平台,手机号码+短信验证码的登录方式,操作非常简单,比起输入密码,用户可能更喜欢短信验证登录。短信验证码保证了用户注册时的质量与数量,它可以更好的校验用户真实身份,可以避免恶意注册,令企业更好的进行用户管理,减少运营维护的工作量。

一. 准备工作

  1. 没有阿里云账号先注册阿里云账户
  2. 短信功能是要收费的,所以乖乖充值吧!
  3. 完成短信签名和短信模板的申请(需要一点时间)
  4. 创建access key(后面需要使用)

二. 配置

  1. 依赖
<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-ecs</artifactId>
            <version>4.17.6</version>
        </dependency>
  1. 配置阿里云短信(这里***是自己要配的,来源于阿里云短信服务)
aliyun:
    accessKey: ***
    accessSecret: ***
    sms:
      domain: ***
      SignName: ***
      TemplateCode: ***
  1. java中引入
@Value("${aliyun.accessKey}")
    private String accessKey;
    @Value("${aliyun.accessSecret}")
    private String accessSecret;
    @Value("${aliyun.sms.domain}")
    private String domain;
    @Value("${aliyun.sms.SignName}")
    private String signName;
    @Value("${aliyun.sms.TemplateCode}")
    private String templateCode;
    @Value("${water.charge.maintenanceCode}")
    private String maintenanceCode;

三. 实战代码(仅仅是后台代码,前端传入手机号)

  1. Controller
@Autowired
    private CustomerAppLoginService customerAppLoginService;
    @ApiOperation("发送手机短信")
    @GetMapping("phone/send_code")
    public JsonData phoneSendCode(@RequestParam("phone") String phone) {
        return customerAppLoginService.phoneSendCode(phone);
    }
  1. service
@Override
    public JsonData phoneSendCode(String phone) {
        // 手机号三重校验
        JsonData jsonData = tripleCheck(phone);
        if (jsonData.getCode() != 0) {
            return jsonData;
        }
        // 自定义验证码
        String vCode = RevenueUtil.getVCode();
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKey, accessSecret);
        IAcsClient client = new DefaultAcsClient(profile);
        // 组装请求
        CommonRequest request = buildRequest(phone, vCode);
        try {
            CommonResponse response = client.getCommonResponse(request);
            JSONObject smsRes = JSONObject.parseObject(response.getData());
            String ok = "OK";
            String code = "Code";
            if (smsRes.get(code).equals(CODE_ERROR)) {
                return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_NUM_OUT);
            }
            if (ok.equals(smsRes.get(code))) {
                log.info("send sms success: " + vCode);
                // 放入缓存,登录时校验,过期时间2分钟
                redisTemplate.opsForValue().set(phone, vCode, 120, TimeUnit.SECONDS);
            } else {
                log.error("send sms failed: " + smsRes.get("Message"));
                return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_FAIL);
            }
        } catch (Exception e) {
            return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_FAIL);
        }
        return JsonData.buildSuccess();
    }
  1. 用到的方法
    a. 校验手机号
/**
     * 手机号正则
     */
    private static final Pattern PHONE_PATTERN = Pattern.compile("^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$");
  /**
     * 手机号格式校验
     *
     * @return
     */
    public static Boolean validatePhone(String phone) {
        if (null == phone || "".equals(phone)) {
            return false;
        }
        Matcher m = PHONE_PATTERN.matcher(phone);
        return m.matches();
    }
b. 组装请求
/**
     * 构建 CommonRequest
     *
     * @param phone
     * @param vCode
     * @return
     */
    private CommonRequest buildRequest(String phone, String vCode) {
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(domain);
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", signName);
        request.putQueryParameter("TemplateCode", templateCode);
        request.putQueryParameter("TemplateParam", "{\"code\":" + vCode + "}");
        return request;
    }
  1. 附加
    代码中使用到Redis存储,用于控制验证码两分钟失效
// 放入缓存,登录时校验,过期时间2分钟
redisTemplate.opsForValue().set(phone, vCode, 120, TimeUnit.SECONDS);

总结

接口逻辑并不复杂,主要能看得懂接口文档和相关配置就行

有哪里有问题欢迎指正

下一篇:【微信小程序 - 工作实战分享】2.微信小程序相关信息获取并且登录

相关文章
|
8月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
自然语言处理 监控 安全
2025年阿里云短信验证码价格多少钱?计费模式与场景选型指南
随着企业数字化转型,短信验证码作为用户身份验证的重要工具,其成本与效率的平衡至关重要。阿里云短信服务以高可靠性、灵活计费和多场景适配著称。按量付费模式适合需求波动大的场景,而短信套餐包则为长期稳定需求提供了成本优势。针对不同业务场景,如高频验证、跨境业务及中小型企业轻量级需求,阿里云提供了定制化的选型策略。此外,通过阶梯定价、防盗刷监控等措施实现成本优化与风险规避,并不断进行技术升级以确保服务的安全性和稳定性。根据2025年最新数据,企业可根据自身需求选择最适合的阿里云短信验证码服务方案。
|
9月前
|
Android开发
微信加好友脚本自动,手机号自动添加定时,可群聊通讯录添加
这是一款基于 AutoJS 的微信自动化脚本,适用于 Android 7.0+ 系统,实现定时批量添加好友功能。采用分层设计(主控模块+功能模块+配置模块)
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
277 1
微信养号脚本,导入手机号自动添加,autojs代码分享
这段代码实现了基本的微信自动添加好友功能,包括读取手机号文件、启动微信、搜索用户和发送
企业微信批量加好友脚本,企业微信自动加手机号好友软件,自动同意群发消息自动回复
这是一款为企业微信设计的自动化营销工具,能够一键批量加好友并自动回复消息。通过模拟操作实现自动化流程,提升网络营销效率。
|
9月前
|
监控 数据可视化 BI
微信计数器统计工具,QQ统计器手机APP,通过autojs实现后台
这是一款基于AutoJS的微信/QQ新增好友监控脚本,具备后台运行、自动统计每日新增好友数量、生成简单报表及定时提醒功能。
|
安全 API PHP
港澳台验证码海外短信群发教程,利用阿里云国际如何实现境外短信操作
港澳台验证码海外短信群发教程,利用阿里云国际如何实现境外短信操作
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
3797 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
小程序
如何将CCBUPT全能墙小程序添加到手机桌面
如何将CCBUPT全能墙小程序添加到手机桌面
220 0