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

java实现发送手机验证码功能1.进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号2.注册好之后,点击用户中心->账户管理,就会进入如下界面(顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了,所以不用担心需要充钱)你需要做的就是获取你自己的ACCOUNTSID和AUTHTOKEN3.点击用户中心->认证,进行企…

大家好,又见面了,我是你们的朋友全栈君。

1. 进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号

2. 注册好之后,点击 用户中心 -> 账户管理,就会进入如下界面 (顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了,所以不用担心需要充钱)  你需要做的就是获取你自己的 ACCOUNT SID 和 AUTH TOKEN

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

3. 点击 用户中心 -> 认证,进行企业认证,企业的资质证件就是企业的营业执照,网上百度一张带有红色的公章就行,公司电话填写自己的就行,最后点击提交

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

4. 需要在秒嘀上新建一个发送手机验证码的模板,点击 配置管理 -> 验证码短信模板,就会进入如下界面

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

5. 点击“新建模板”按钮, 填写好模板名称、短信签名 和 短信内容(短信内容可以选择 验证码通知短信模板 或者 自己编写短信内容),点击“提交审核”按钮即可,界面如下

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

6. 然后等待 短信验证码模板 审核通过即可,点击 配置管理 -> 验证码短信模板,查看 短信验证码 是否审核通过

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

7. 接下来就是代码了,把我圈住的地方改成自己的就行,其他的不用动,tamp值 一定要与自己创建短信模板的短信内容保持一致

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

8. java短信发送验证码

   导入阿里巴巴fastjson.jar包:   

                 方式一:下载fastjson.jar包导入工程就行      链接:https://pan.baidu.com/s/1RH4-x82G8-sNmn7y5YhdjA    

                方式二:maven工程直接把     下面这段代码复制到  pom.xml 中就行   

 <dependency>                                                                               
     <groupId>com.alibaba</groupId>                                                        
     <artifactId>fastjson</artifactId>
     <version>1.2.47</version>
 </dependency>   

    源码如下 :                                                       

package com.group.util;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import com.alibaba.fastjson.JSONObject;
 
/**
 * 
 * @Title:GetMessageCode
 * @Description:发送验证码
 * @author:ヅ零碎de記憶ぷ
 * @Date 2018年7月4日 下午9:27:04
 */
public class GetMessageCode {
	private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
	private static final String ACCOUNT_SID = "";
	private static final String AUTH_TOKEN = "";
 
	// 根据相应的手机号发送验证码
	public static String getCode(String phone) {
		String rod = smsCode();
		String timestamp = getTimestamp();
		String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);
		String tamp = "【联途旅游】尊敬的用户,您好,您的验证码为:" + rod + ",若非本人操作,请忽略此短信。";
		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(10000);// 设置参数读取时间
			connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
			// 提交请求
			out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
			String args = getQueryArgs(ACCOUNT_SID, tamp, phone, timestamp, sig, "JSON");
			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 block
			e.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 smsContent, String to, String timestamp, String sig,
			String respDataType) {
		return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "&"+"timestamp=" + timestamp
				+ "&sig=" + sig + "&respDataType=" + respDataType;
	}
 
	// 获取时间戳
	public static String getTimestamp() {
		return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
	}
 
	// sing签名
	public static String getMD5(String sid, String token, String 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 block
			e.printStackTrace();
		}
 
		return result.toString();
	}
 
	// 创建验证码
	public static String smsCode() {
		String random = (int) ((Math.random() * 9 + 1) * 100000) + "";
		return random;
	}
}


9. 测试发送手机短信验证码 源码如下   (手机号码换成你想要发送到指定手机的手机号码即可)

package com.message.test;

public class Test {

	public static void main(String[] args) {
		String phone = "12345678910";
		GetMessageCode.getCode(phone);
	}

}

 10. 常见的问题

      (1)返回错误码 00104 “相同的应用当天给同一手机号发送短信的条数小于等于n” 如何处理?

        答:此错误是同一手机号短信发送请求频率限制,请求失败也算次;
               验证码短信下发次数限制为:1分钟2次、1小时4次、24小时内10次;
               通知类短信下发次数限制为:24小时内20次;
               营销类短信下发次数限制为:24小时内20次。
               验证码短信24小时下发10次,不能修改
               通知类短信有需要可调整下发次数
               该类配置的修改需要在后台中修改设置,客户端不能设置
               如果在测试时候遇到请求限制,可联系客服添加白名单

     (2)返回错误码 00134 “没有和内容匹配的模板” 如何处理?

        答:请检查是否在官网建立模板,smscontent=【短信签名】+内容,发送内容要与模板匹配。       

     (3)返回错误码 0005 “timestamp已过期” 如何处理? 

       答:把获取时间戳 getTimestamp()方法中的 return new SimpleDateFormat(“yyyyMMddHHmmss”).format(new Date());换成return System.currentTimeMillis()+””; 即可。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162638.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个—员工管理源代码分享

    使用Jquery+EasyUI进行框架项目开发案例解说之中的一个—员工管理源代码分享

    2021年11月13日
  • Eclipse配置tomcat[通俗易懂]

    1.打开Eclipse,Window–>Preference–>Server–>RuntimeEnvironments2.点击Add,选择相应的tomcat版本,本文以tomcat-8.0.53为例3.选择ApacheTomcatv8.0,点击Next4.配置好Tomcat名和Tomcat路径,点击finish5.在Eclipse控制台…

  • JavaScript 正则表达式全面总结

    JavaScript 正则表达式全面总结如果您发现错误,请一定要告诉我,拯救一个辣鸡(但很帅)的少年就靠您了!本文适合有JavaScript基础&&面向搜索引擎书写正则的人群。正则表达式是用于匹配字符串中字符组合

  • linux修改用户名命令6,linux用命令改用户名

    linux修改用户名命令6,linux用命令改用户名怎样更改linux的用户名Linux中可以使用usermod命令更改用户名,具体的操作方法如下:首先打开linux的终端,输入指令修改用户名,简单的用户名修改是usermod加参数l,后面跟新用户名,最后是旧用户名。此时用cd命令来到home目录,会发现存在一点小问题。linux下命令怎么修改用户名先用终端进入到根目录下的root文件夹然后su权限不用我说了吧然后用下面这个命令:usermo…

  • 华为ensp安装包_华为服务器安装系统教程

    华为ensp安装包_华为服务器安装系统教程什么是eNSPeNSP是由华为公司研发并且免费供大家使用的图形化网络操作平台,主要是对各大企业的网络。路由器,以及交换机路由器进行模拟,呈现一个真实的场景,让用户能模拟练习网络技术!软件特点还原实景1,可模拟华为的AR路由器,部分交换机以及客户端实现企业网和运营商的图面呈现2,可以模拟客户机终端,云,中继交换机等3,仿真设备功能,快速的学习华为命令。快速了解华为命令4,可以通过真实网卡实现与真实设备的对接5,模拟接口抓包,可以很直观的看到协议的交互过程。具体图文安装步骤详解..

    2022年10月14日
  • 怎么用谷歌学术下载论文_国内怎么使用谷歌学术

    怎么用谷歌学术下载论文_国内怎么使用谷歌学术如何在谷歌学术下载论文(在MacPro上记录,但是windows应该同样适用)1下载谷歌浏览器下载谷歌浏览器官网截图如下:2下载谷歌浏览器扩展程序googlehelper下载在下载的时候,要记住下载的位置,后面要用。官网截图如下:3将拓展程序插入到谷歌浏览器中1点击设置2进入拓展程序3打开开发者模式4添加解压后的拓展程序4登陆GHelper前提是需要有Gmail的邮箱,请自行搜索注册。5最后就可以开心的使用谷歌学术搜索文章啦有什么问题,欢迎交

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号