个人用户实现发送短信功能

准备工作

因为国家政策 ,阿里云和其他的大型短信调用网站审核严格所以我们用比较普通的榛子云来练习短信验证

了解阿里云短信码

登录阿里云,选择短信服务

在这里插入图片描述

首先要了解发送短信的四个步骤

在这里插入图片描述

进入申请签名,查看大致内容,可以看到这边需要用到很多证,点击下载委托书模板查看证件的大致内容。

在这里插入图片描述
下载完毕后可以看到,委托书大概内容如下:
在这里插入图片描述
申请签名之后需要在后台验证这个签名,由于我们申请不了,这边只做了解即可。其余的三个步骤点进去查看大概内容,在面试的时候能够说出一二即可。

榛子云短信系统

选择注册榛子云短信用户注册系统

在这里插入图片描述

注册之后进入如下页面

注意:榛子云只是一个测试系统,真实开发中还是使用阿里云短信服务,这边的榛子云发送短信需要先进行充值。

在这里插入图片描述

打开我的应用,查看这边的APPId,AppSecret,这边后续开发中会用到。

在这里插入图片描述

创建项目

创建一个SpringBoot项目,这边最好选择自定义的阿里云网址,防止创建项目失败的情况。

在这里插入图片描述

导入如下依赖

 <dependency><groupId>com.zhenzikj</groupId><artifactId>zhenzisms</artifactId><version>2.0.2</version></dependency>

创建完毕之后,使用阿里域名创建的项目会自动生成一个properties文件,只需要改动数据库连接地址,用户名和密码即可。

在这里插入图片描述

复制MessageDemo

package com.zb.utils;import com.zhenzi.sms.ZhenziSmsClient;import java.util.HashMap;
import java.util.Map;
import java.util.Random;public class MessageDemo {public static Map<String,Object> sendMessage(String phone){Map<String,Object> map = new HashMap<>();String apiUrl="https://sms_developer.zhenzikj.com";String appId="xxxx";//在控制台的 我的应用String appSecret="xxxx";//在控制台的 我的应用ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret);Map<String, Object> params = new HashMap<String, Object>();params.put("number", phone);//你要发送的手机号params.put("templateId", "10226");//短信模板里的String[] templateParams = new String[2];//模板int i = new Random().nextInt(9999 - 1000 + 1);int sjs=i+1000;String yzm = String.valueOf(sjs);templateParams[0] = yzm;templateParams[1] = "5分钟";params.put("templateParams", templateParams);String result = null;try {result = client.send(params);} catch (Exception e) {e.printStackTrace();}map.put("yzm",yzm);map.put("result",result);System.out.println(result);return map;}
}

粘贴自己应用的几个id

在这里插入图片描述

因为需要验签,所以验证码应该放在redis中,所以应该写一个redis的工具类。

package com.zb.utils;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(objectMapper);RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(serializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(serializer);redisTemplate.afterPropertiesSet();return redisTemplate;}@Beanpublic RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);}
}

写一个简单的登录页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>验证码登录</title><script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script></head>
<body>手机号:<input id="phone"/><br/>验证码:<input id="code"/><br/>
<button id="getCode">获取验证码</button>
<button id="login">登录</button></body><script>login();function login(){$("#getCode").click(function(){var phone = $("#phone").val();$.ajax({url:"/sendMessage",data:{'phone':phone},datatype:"json",type:"post",success:function(msg){alert(msg);if(msg=='{"code":0,"data":"发送成功"}'){alert("发送成功");}}})})$("#login").click(function () {var code = $("#code").val();$.ajax({url:"/verify",type:"post",data:{"code":code},dataType:"json",success:function (msg) {if(msg==true){alert("登录成功");}else{alert("登录失败")}},error:function () {alert("网络正忙");}})})}</script>
</html>

最后写一个controller控制器进行跳转,判断验证码以及发送短信的操作。

package com.zb.controller;import com.zb.utils.MessageDemo;
import com.zb.utils.RedisConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.Map;
import java.util.concurrent.TimeUnit;@Controller
public class UserController {@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Autowired(required = false)private RedisConfig redisConfig;/*** 登录* @return*/@RequestMapping("toLogin")public String toLogin(){return "login";}/*** 发送信息* @return*/@RequestMapping("sendMessage")@ResponseBodypublic String sendMessage(@RequestParam String phone){System.out.println(phone);Map<String,Object> map = MessageDemo.sendMessage(phone);String yzm = (String) map.get("yzm");RedisTemplate<String, Object> redisTemplate = redisConfig.redisTemplate(redisConnectionFactory);redisTemplate.opsForValue().set("yzm",yzm,3000, TimeUnit.SECONDS);String result = (String) map.get("result");return result;}/*** 判断验证码*/@RequestMapping("/verify")@ResponseBodypublic Boolean verify(String code){RedisTemplate<String, Object> redisTemplate = redisConfig.redisTemplate(redisConnectionFactory);String yzm = (String) redisTemplate.opsForValue().get("yzm");Boolean flag = false;if(yzm.equals(code)){flag = true;}return flag;}}

操作页面如下:

在这里插入图片描述

在这里插入图片描述

到这边基本就完成了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33050.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT文本自动生成有哪些应用

ChatGPT具有强大的文本生成能力&#xff0c;能够模拟人类的语言和情感表达&#xff0c;对文字工作产生了重要影响。对于我们从事文字工作的小伙伴而言&#xff0c;ChatGPT的出现对我们的影响是首当其冲的&#xff0c;今天跟大家分享ChatGPT在文字创作方面有哪些影响。 自动化文…

简单的小程序聊天对话窗口界面

一个简单的微信小程序聊天对话窗口界面,包括发送文本功能 直接上代码,js代码: // 简单版 Page({data: {content: ,// 当前登录者信息login: {id: 2023,user: 大猪蹄子,avatar: https://img2.baidu.com/it/u1581320883,910100018&fm253&app53&sizew500&n0&…

聊天记录怎么录视频 微信聊天记录屏幕录制

互联网的发展&#xff0c;手机交流代替了面对面交流&#xff0c;手机交流更加方便快捷&#xff0c;也带来了一些便利&#xff0c;拉近了人与人之间的距离&#xff0c;现在大家都习惯在网上聊天了&#xff0c;聊天如果不删掉的话&#xff0c;就会有记录的。有的小伙伴想要录制成…

摆地摊又被城管赶了

文|洪生鹏 下班回家路过驿站顺便取了个快递&#xff0c;突然一阵阵砰砰的声音传来&#xff0c;好刺耳。 原来是城管来了&#xff0c;摆地摊的人纷纷推着车子往这边赶来&#xff0c;有卖水果的&#xff0c;有做小吃的&#xff0c;也有卖衣服。 摊主们得知城管来了&#xff0c;推…

程序员摆地摊能接到活吗?码农地摊卖什么能挣到外快钱?

现在全民摆地摊&#xff0c;做为一个码农&#xff0c;也是蠢蠢欲动&#xff0c;思来想去不知道卖什么好&#xff1f;看到好多同事下了班都着急回家出摊&#xff0c;挣外快&#xff0c; 同事们闲暇时间说来话去的也都是地摊经济&#xff0c;做一个有出息的程序员&#xff0c;我们…

摆摊吗?我卖锅,你修手机。

由于疫情的影响 国家开始鼓励地摊经济。 我们来看看&#xff0c;搞工程和搞电子的人摆摊能什么。 先看&#xff0c;搞工程的人是这样摆摊的&#xff01; 而搞电子的人是这样摆摊的&#xff01; PCB工程师 测试工程师 射频工程师 单片机工程师 器件工程师 EMC工程师 芯片工程师 …

在微信上怎么开店卖东西?

在微信上怎么开店卖东西&#xff1f;在微信上开店卖东西主要需要小程序&#xff0c;而小程序也是我们常说的小程序店铺&#xff0c;有了小程序才能在微信上开店卖东西。那么我们怎么制作小程序在微信上开店卖东西呢&#xff1f;下面给大家讲解一下。 1、小程序账号 在做小程序…

摆摊吧,程序员!

谁都没想到&#xff0c;在2020年 "摆摊"成功接棒"口罩"、"头盔"&#xff0c;成了又一个热门话题 一觉醒来&#xff0c;整个朋友圈都在讨论摆摊的事情 以至于还没明白什么是"网红经济"的我 要开始思考"地摊经济"了 那么&…

内向的程序员如何改变自己,试试摆地摊吧

文章目录 程序员为什么要去摆地摊我的真实摆摊经历租摊位采购商品正式开业 为什么看了很多书却没有什么改变彩蛋送个大家一个励志&#xff08;打鸡血&#xff09;的故事克服恐惧的演讲 最近地摊经济风生水起&#xff0c;今天聊聊程序员摆地摊的好处&#xff0c;以及我10年前摆地…

企业摆摊新姿势

企业摆摊新姿势 既然是全民摆摊&#xff0c;怎么能少了腾讯等知名大公司的身影。从员工到董事局主席&#xff0c;所有人纷纷拥抱地摊经济&#xff0c;投身到一线战壕。 这位腾讯招聘的小哥&#xff0c;喇叭、军用水壶、黄色安全帽、纸箱&#xff0c;石头&#xff0c;这个可能…

你信了摆摊经济,推着小车出门以后..

来源&#xff1a;接地气学堂 作者&#xff1a;接地气的陈老师 互联网人&#xff0c;来摆摊了&#xff01;摆摊经济一词大火以后&#xff0c;很多自媒体又开始算起摆摊的账。特别喜欢算出诸如“卖煎饼大妈月入3万”之类的账目&#xff0c;再加个“互联网人”的点缀&#xff0c;刺…

地摊经济火了!手把手教程序员摆地摊如何月入9万

说到摆地摊&#xff0c;很多人觉得没面子&#xff0c;认为“走投无路”才会摆地摊&#xff0c;这其实是大众的误解&#xff0c;你知道这群人一天能赚多少钱吗&#xff1f; 不夸张的说&#xff0c;一小时能赚800元以上&#xff0c;一天至少赚3000元&#xff0c;一个月就是9万元…

程序员如何优雅地摆地摊

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 当下摆地摊如火如荼地在全国上下展开&#xff0c;这里怎么少得了程序员呢&#xff1f;这年头没摆过摊&#xff0c;都对不起国家给的政策。 程序员该如何在这一风口…

经营烧烤店最火的方法

经营烧烤店最火的方法因地区、文化和市场需求而异&#xff0c;以下是传递宝APP&#xff08;扫码点餐&#xff09;一些普遍的建议&#xff1a; 1.选择好的地点&#xff1a;选择一个繁华的区域或经常有人流量的地方&#xff0c;比如购物中心、商业区或者人口密集的社区。这样可以…

摆摊吧,互联网人!

2020&#xff0c;重锤出击&#xff01; 摆地摊&#xff0c;最新风口&#xff01; 互联网人转行后都适合摆什么样的地摊&#xff1f; 让我们一探究竟&#xff1a; 1 程序员 2 运营 3 HR 4 设计师 5 前台 6 电商运营 7 公关 8 产品经理 9 广告人 10 自媒体 11 养猫的互联网人 12 …

GPT-5不能停!吴恩达和LeCun直播回怼马斯克:汽车都还没发明,要什么安全带......

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 梦晨 发自 凹非寺转载自&#xff1a;量子位&#xff08;QbitAI&#xff09; 大模型研究不能停&#xff01; 吴恩达和LeCun为了这事儿&#xff…

GPT-5不能停!吴恩达和 LeCun:汽车都没发明要什么安全带

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 自从 3 月 30 日&#xff0c;马斯克等人叫停 GPT-5 研发至少 6 个月&#xff0c;各路大佬纷纷有了后续回应&#xff0c;伴随着“支持”和“反对”各站一派。 &#xff08;图源&#xff…

chatgpt赋能python:Python查错完全指南:如何快速诊断和解决常见的错误

Python查错完全指南&#xff1a;如何快速诊断和解决常见的错误 Python是一种高级编程语言&#xff0c;它被广泛用于数据科学、机器学习、Web开发和自动化等领域。虽然Python具有易于学习和易于使用的特点&#xff0c;但是在编写复杂的应用程序时&#xff0c;错误和异常情况经常…

chatgpt赋能python:Python中输入怎么写?完整教程

Python中输入怎么写&#xff1f;完整教程 如果你正在学习Python编程&#xff0c;那么输入是你必须掌握的重要概念之一。在Python中&#xff0c;输入是指将数据从用户的键盘输入到程序中。这些数据可以是字符串、整数、浮点数或其他任何类型的值。本文将提供有关Python中输入的…

chatgpt赋能python:如何隐藏Python控制台:全面指南

如何隐藏Python控制台&#xff1a;全面指南 Python是一种广泛使用的编程语言&#xff0c;在网站开发、科学计算、数据分析等领域都有广泛应用。但是&#xff0c;调试代码时&#xff0c;Python控制台会显示出程序运行时产生的日志信息和错误提示。这在某些情况下可能会影响用户…