我这里使用的旦米(http://www.danmi.com/)你们用阿里的就去看看其他博客

1.首先注册一个旦米的账号,第一次注册会免费的送你10元。足够你去测试用,不用担心自己去充钱。

2.注册好了登录进去,必须要公司认证,认证通过之后才能使用。可以自己去网上搜一些企业的营业执照。但是一定要有效的才有用。这个我自己也是搞了大半天才弄好。

3.认证通过之后,找到验证码通知里面的API配置 获取你自己的 ACCOUNT SID 和 AUTH TOKEN

4.在短信通知里的模板管理里面配置你短信模板,审核通过之后就可以使用了,就可以拿到自己的模板id

5.这些准备好之后,就可以写代码了

5.1 我使用的是maven,直接在pom.xml直接导入依赖就可以了
 <dependency>                                                                               <groupId>com.alibaba</groupId>                                                        <artifactId>fastjson</artifactId><version>1.2.47</version></dependency>

注意
ACCOUNT_SID 和 AUTH_TOKEN 放你自己的 ,还有param,和templateid 用你自己的

验证码通知类的内容不要直接用smsContent字段值来进行请求,传参的时候要用param字段值和templateid字段值来进行请求;如果有变量就带param字段,没有就不带,param字段值指的是您在用户中心建的模板里边带的短信变量,多个变量用英文逗号隔开;templateid就是在用户中心建的模板生成的模板id;如果只用smsContent字段值来进行请求,系统会默认匹配到会销子账号里边去(会销是要过人工审核的)

   private static final String QUERY_PATH = "https://openapi.danmi.com/distributor/sendSMS";private static final String ACCOUNT_SID = "4dabce68d9e16a8****";private static final String AUTH_TOKEN = "80b2b2a32e0139b6ef4b***7";

demo

package com.example.demo.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;import com.alibaba.fastjson.JSONObject;/*** @Description:发送验证码* @author:* @Date*/
public class UserLController {private static final String QUERY_PATH = "https://openapi.danmi.com/distributor/sendSMS";private static final String ACCOUNT_SID = "4dabce68d9e16a8****";private static final String AUTH_TOKEN = "80b2b2a32e0139b6ef4b***7";// 根据相应的手机号发送验证码public static String getCode(String phone) {//获取验证码String rod = smsCode();//获取时间戳long timestamp = getTimestamp();//获取sing签名String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);//短信模板String tamp = "【杭州华佳】亲爱的用户,您好,您的验证码为" + rod + ",2分钟内有效,若非本人操作请忽略。";OutputStreamWriter out = null;BufferedReader br = null;StringBuilder result = new StringBuilder();try {URL url = new URL(QUERY_PATH);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setDoInput(true);// 设置是否允许数据写入connection.setDoOutput(true);// 设置是否允许参数数据输出connection.setConnectTimeout(5000);// 设置链接响应时间connection.setReadTimeout(20000);// 设置参数读取时间connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");// 提交请求out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");Integer smsType = 100000;String  templateid = "****";String  param = URLEncoder.encode(rod,"UTF-8");String args = getQueryArgs(ACCOUNT_SID, param,phone, timestamp, sig, "JSON",smsType,templateid);out.write(args);out.flush();// 读取返回参数br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String temp = "";while ((temp = br.readLine()) != null) {result.append(temp);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}JSONObject json = JSONObject.parseObject(result.toString());String respCode = json.getString("respCode");String defaultRespCode = "00000";if (defaultRespCode.equals(respCode)) {return rod;} else {return defaultRespCode;}}// 定义一个请求参数拼接方法public static String getQueryArgs(String accountSid, String param, String to, Long timestamp, String sig,String respDataType, Integer smsType, String templateid) {return "accountSid=" + accountSid + "&param=" + param + "&to=" + to + "&"+"timestamp=" + timestamp+ "&sig=" + sig + "&respDataType=" + respDataType + "&smsType=" + smsType + "&templateid=" + templateid;}// 获取时间戳public static long getTimestamp() {//用这个要报错,要用北京时间的时间戳 //        return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());long timestamp = System.currentTimeMillis();return timestamp;}// sing签名public static String getMD5(String sid, String token, Long timestamp) {StringBuilder result = new StringBuilder();String source = sid + token + timestamp;// 获取某个类的实例try {MessageDigest digest = MessageDigest.getInstance("MD5");// 要进行加密的东西byte[] bytes = digest.digest(source.getBytes());for (byte b : bytes) {String hex = Integer.toHexString(b & 0xff);if (hex.length() == 1) {result.append("0" + hex);} else {result.append(hex);}}} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result.toString();}// 创建验证码public static String smsCode() {String random = (int) ((Math.random() * 9 + 1) * 100000) + "";return random;}
}
5.2测试
package com.example.demo;import com.example.demo.controller.UserLController;import java.net.URLEncoder;public class Test {public static void main(String[] args) {String phone = "187847******";UserLController.getCode(phone);System.out.println(UserLController.getCode(phone));}}
``

java 实现发送手机验证码的功能 (超详细)相关推荐

  1. java实现发送手机验证码功能

    1. 进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号 2. 注册好之后,点击 用户中心 -> 账户管理,就会进入如下界面 (顺便提一下,新注册的用户,平台会免费 ...

  2. Java实现发送手机验证码

    向手机发送验证码在用户注册等等业务中会用到,下面我来介绍如何用Java实现向手机发送验证码. 笔者此处使用的是阿里云的短信服务,首先需要登录阿里云官方网站,找到并开通短信服务,然后需要申请短信签名和模 ...

  3. Java实现发送手机验证码,发送短信

    要发送短信,我们需要第三方提供的短信接口,这里我使用阿里云的短信服务. 首先进入阿里云的官网,然后注册.登陆之后选择云通信-->短信服务 然后点击免费开通. 开通后进入控制中心,选择右上方的支持 ...

  4. 项目开发过程中如何使用免费开发手机验证码验证功能(详细教程)

    一群热爱技术并且向往优秀的程序猿同学,不喜欢水文,不喜欢贩卖焦虑,只喜欢谈技术,分享的都是技术干货.Talk is cheap. Show me the code 首先声明一下,这个Demo仅限用于开 ...

  5. 阿里云 java SpringBoot发送手机验证码

    准备工作:需要在阿里云注册,并且申请AK.自行百度 然后: 首先新建springboot文件,在此不做赘述 向pom.xml文件中添加依赖: <!--短信sdk--> <depend ...

  6. java 免费发送手机短信功能

    天天打酱油,闲来无事把现有项目上的一些对以后开发有用的实例进行提取! package com;import java.io.BufferedReader; import java.io.DataOut ...

  7. Java技术类校招面试题汇总:用java实现发送手机验证码

    分布式系统特性与衡量标准 透明性:使用分布式系统的用户并不关心系统是怎么实现的,也不关心读到的数据来自哪个节点,对用户而言,分布式系统的最高境界是用户根本感知不到这是一个分布式系统 可扩展性:分布式系 ...

  8. java实现语音发送,Java实现发送手机短信语音验证功能代码实例

    这篇文章主要介绍了java实现发送手机短信语音验证功能代码实例,www.cppcns.com文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用第三方 ...

  9. SpringBoot+vue 使用阿里云的短信功能发送手机验证码

    前言: 小编后端用的是Springboot 前端用的是vue ,小编主要是写后台,前端页面比较简陋,后期还要调优,写的不对处还望多多包涵. 环境: 需要先准备好阿里云的账号和一些必要的参数.详情见我的 ...

最新文章

  1. java从字符串中提取数字
  2. ​CPU将进入新时代:押注计算芯片的极限协同设计
  3. 64 oracle client,64bit oracle and oracle client.
  4. Leetcode周赛5193. 删除字符使字符串变好
  5. 神经网络模型模型转ONNX
  6. delphi 中几种多线程操作方式
  7. Nonblocking I/O 与 Asynchronous I/O
  8. LeetCode 1105. 填充书架(DP)
  9. linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国
  10. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命
  11. 编程之美读书笔记1.2——中国象棋将帅问题
  12. SPSS基础教程—怎样对数据进行综合评价排名
  13. URI:统一资源标识符
  14. js 实现文件下载——文档流形式和本地文件下载——基础积累
  15. cc域名转入可以吗?其特点是什么?
  16. 第2篇,到底什么是互联网思维?
  17. 华为服务器修改管理网口,怎么设置华为服务器管理口
  18. 计算机数字顺序怎么带公式,Excel函数公式:6个数据排序技巧,总有一个适合你!...
  19. 关于负数在计算机中的表示方法
  20. MODBUS调试工具(modscan32)使用说明

热门文章

  1. modle bulinder 实践1.Excel坐标转面
  2. 世界500强:《财富》全球最大五百家公司排名
  3. 创龙28377d历程_广州创龙SOM-TL138/1808/6748核心板 JTAG仿真器接口/LED
  4. Linux系统: 第六章 Linux存储管理1
  5. SQL数据规范1NF、2NF、3NF
  6. 实用统计软件(SAS)练习题(一)
  7. 度假式联合办公是创业者流行的新工作方式
  8. 超滤膜之水处理技术教学实训QY-HGGY43
  9. RTL9300 修改内核和busybox支持 vlan if接口注册到内核
  10. Linux 下的歌词秀软件