提示:本文仅记录本人工作中遇到的难点与个人见解,仅供参考,如有问题请见谅。

目录

前言

一、网易云信短信服务是什么?

二、使用步骤

1、创建网易云信工具类CheckSumBuilder

2、短信验证码发送SendCodeUtil工具类

3、MessageController类:短信验证码发送接口

总结


前言

此文章仅记录网易云信的短信验证开发事项


提示:以下是本篇文章正文内容,下面案例可供参考

一、网易云信短信服务是什么?

短信服务(Short Message Service)是网易云信为用户提供的一种通信服务的能力,目前支持验证码类短信、通知类短信、运营类短信、语音类短信、国际短信等事务性短信。

二、使用步骤

1、创建网易云信工具类CheckSumBuilder

代码如下:

import lombok.extern.slf4j.Slf4j;
import java.security.MessageDigest;/*** 该类复制与网易云信的开发文档、用于生成一个CheckSum参数*/
@Slf4j
public class CheckSumBuilder {// 计算并获取CheckSumpublic static String getCheckSum(String appSecret, String nonce, String curTime) {return encode("sha1", appSecret + nonce + curTime);}// 计算并获取md5值public static String getMD5(String requestBody) {return encode("md5", requestBody);}private static String encode(String algorithm, String value) {if (value == null) {return null;}try {MessageDigest messageDigest = MessageDigest.getInstance(algorithm);messageDigest.update(value.getBytes());return getFormattedText(messageDigest.digest());} catch (Exception e) {log.error("短信验证码错误:" + e.getMessage());throw new RuntimeException(e);}}private static String getFormattedText(byte[] bytes) {int len = bytes.length;StringBuilder buf = new StringBuilder(len * 2);for (byte aByte : bytes) {buf.append(HEX_DIGITS[(aByte >> 4) & 0x0f]);buf.append(HEX_DIGITS[aByte & 0x0f]);}return buf.toString();}private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};}

2、短信验证码发送SendCodeUtil工具类

import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;import java.util.*;/*** 网易云信-短信验证码发送*/
public class SendCodeUtil {// 发送验证码的URLprivate static final String SERVER_URL = "https://api.netease.im/sms/sendcode.action";// 校验验证码的URLprivate static final String VERIFY_URL = "https://api.netease.im/sms/verifycode.action";// 网易云信分配的账号private static final String APP_KEY = "*****************";// 网易云信分配的密钥private static final String APP_SECRET = "**********";// 随机数(认证人的生日)private static final String NONCE = "*****";// 短信模板IDprivate static final String TEMPLATE_ID = "*****";// 验证码长度,范围4~10,默认为4private static final String CODE_LEN = "4";// 发送短信验证码public static JSONObject sendCode(String phone) {// 当前时间戳0String curTime = String.valueOf((new Date()).getTime() / 1000L);// 计算CheckSumString checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);// 添加请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);headers.add("AppKey", APP_KEY);headers.add("Nonce", NONCE);headers.add("CurTime", curTime);headers.add("CheckSum", checkSum);// 添加请求体MultiValueMap<String, String> body = new LinkedMultiValueMap<>();body.add("templateid", TEMPLATE_ID);body.add("codeLen", CODE_LEN);body.add("mobile", phone);// 封装请求头和请求体HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(body, headers);/*获取返回结果,示例:{"code":200,"msg":"401","obj":"2596"}code-200表示状态码正常msg-401表示此次发送的sendIdobj-2596表示此次发送的验证码*/ResponseEntity<JSONObject> response = new RestTemplate().postForEntity(SERVER_URL, request, JSONObject.class);// 返回Body体return response.getBody();}// 检验验证码是否有效public static Boolean verifyCode(String phone, String code) {String curTime = String.valueOf((new Date()).getTime() / 1000L);String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);// 添加请求体MultiValueMap<String, String> body = new LinkedMultiValueMap<>();body.add("mobile", phone);body.add("code", code);// 添加请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);headers.add("AppKey", APP_KEY);headers.add("Nonce", NONCE);headers.add("CurTime", curTime);headers.add("CheckSum", checkSum);// 封装请求头和请求体HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(body, headers);// 发送请求,获取到返回结果ResponseEntity<JSONObject> response = new RestTemplate().postForEntity(VERIFY_URL, request, JSONObject.class);// 获取到结果里面的Body内容JSONObject object = response.getBody();assert object != null;// 如果code为200说明为true,否则为falsereturn object.get("code").toString().equals("200");}public static void main(String[] args) {System.out.println(sendCode("155********"));System.out.println(verifyCode("155********", "****"));}}

3、MessageController类:短信验证码发送接口

代码如下:

import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@Api(tags = "短信验证码发送接口")
@RestController
@RequestMapping("/message")
public class MessageController {/*** 向指定的手机号发送短信验证码* @param phone 手机号*/@ApiOperation(value = "发送短信验证码", notes = "发送短信验证码")@RequestMapping(value = "/sendCode", method = RequestMethod.GET)public Result<String> sendCode(@RequestParam("phone") String phone) {// TODO 2022/12/8: 如何判断验证码是否已发送Result<String> result = new Result<>();try {// 获取到返回结果JSONObject object = SendCodeUtil.sendCode(phone);if (oConvertUtils.isNotEmpty(object)) {if (object.get("code").toString().equals("200")) {result.setSuccess(true);result.setMessage("请求成功,请稍候!");} else {result.setSuccess(false);result.setMessage("验证码发送失败,请稍后再试!");}}} catch (Exception e) {result.setSuccess(false);result.setMessage("未知错误,请稍后再试!" + e.getMessage());}return result;}
}

网易云信-短信验证码发送、验证相关推荐

  1. Python 网易云信(短信验证码) SDK

    Python SDK 网易云信(短信验证码) Golang SDK 网易云信(短信验证码) 网易云信官网地址 网易云信短信功能开通说明 官方短信验证码接口文档 环境依赖准备 pip install r ...

  2. 网易云信短信验证码验证php实现

    有评论问我怎么用,,,于是简单更新了一下使用方法.... 网易云信5分一条,阿里大于4分5一条,但是网易云信自带验证系统,阿里大于需要自己指定验证码,自己做验证,但是,,,,阿里大于可以自己定义签名, ...

  3. QPW 手机短信验证码发送日志表(tf_sms_send_log)

    文章目录 手机短信验证码发送日志表 需求说明 手机短信验证码发送日志表 CREATE TABLE `tf_sms_send_log` (`send_id` bigint(11) NOT NULL AU ...

  4. flask项目之5:短信验证码发送

    概述: 短信验证码的发送需要限制验证码的发送间隔不能不停的发,因为测试时发送的验证码是要花钱的,不可能不花钱就办事 短信验证码要根据图片验证码是不是正确再进行发, 进行短信验证码的实验要测试容联云平台 ...

  5. 使用Mob进行短信验证码发送

    首先,很多第三方短信验证码都可以,为什么我要选择mob的呢? 因为mob的短信验证码是完全免费 并且支持IOS,Android,Unity3d,Cocos2d-X的集成 Mob的官网:全球领先的数据智 ...

  6. php调用nexmo发送短信,在 Laravel 中 “规范” 的开发短信验证码发送功能

    Laravel简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行 ...

  7. 手机短信验证码发送(106短信验证码发送)

    打开网页地址栏输入:http://www.106jiekou.com/ 需要用户注册,登陆,在上边购买短信,大概是10块钱100条, 买完之后可以直接下载接口说明文档和源代码的案例,是个压缩包 cu- ...

  8. 怎样避免短信验证码发送失败

    大家都知道生活中短信验证码是必不可少的,我们更改密码,确认身份还有日常交易,或者是使用app短信平台,都会接触到短信验证码,但是有时候会遇到点击"发送验证码"后没收到短信验证码的现 ...

  9. 短信验证码发送失败的常见原因有哪些?

    短信验证码现在几乎已成为互联网各行业的标配所在,在账户注册.密码修改.支付确认等方面发挥着重要的作用.目前通过短信验证码接口接入第三方短信验证码平台的短信服务,99%以上的用户基本上都可以在几秒钟之内 ...

最新文章

  1. HTML form 标签的 enctype 属性
  2. 迭代和瀑布的最大的差别就在于风险的暴露时间上
  3. mysql 单号,利用 MySQL 自增列生成订单号
  4. 微软在Skype推出LGBT骄傲月表情与贴纸
  5. C# numericUpDown控件用法总结及注意事项
  6. 基本BASH SHELL脚本命令——切换目录以及处理文件和目录的基本知识
  7. thinkphp mysql高并发_WBB - ThinkPhp高并发提交如何保障数据正常
  8. C++编写简单的俄罗斯方块游戏
  9. 情人节海报psd分层模板|好的图层,任你选择
  10. SQLServer create schema
  11. @font-face 字体图标的应用
  12. [20个项目学会BBC micro:bit编程] 12-蜂鸣器控制
  13. CentOs 虚拟LINUX系统安装与虚拟环境配置
  14. EEPROM AT24C08的操作
  15. 解决MATLAB的xlsread函数读取表格失败
  16. 分治算法详解及经典例题
  17. 《剑指Offer》51. 二叉搜索树的第k个结点
  18. 聊天软件端到端加密使用的什么算法?是否能防止第三方抓包软件?
  19. java高级面试题(易错题)
  20. [数据库] DSN是什么/是什么意思--解释

热门文章

  1. EXCEL 如何实现下拉填充公式,保持公式部分内容不变,使用绝对引用
  2. 暴力变现之测评小程序
  3. android datepicker 自定义,Android DatePicker的简单自定义
  4. 0422“数学口袋精灵”BUG发现
  5. 微信内防红短网址是怎么做出来的,微信域名防红原理
  6. 弘辽科技:多多进宝推广前,必知的五个操作常见问答
  7. TypeScript全攻略(收藏吃灰必备!)
  8. android实现教学界面,基于Android的教学信息管理系统的设计与实现
  9. 400 Bad Request报错解决
  10. 2012年10月管理计算机系统,2010年10月全国高等教育自学考试管理系统中计算机应用真题...