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

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说java实现发送手机验证码功能_java图片验证码,希望能够帮助大家进步!!! 1. 进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号 2. 注册好之后,点击 用户中心 -> 账户管理,就会进入如下界面 (顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说java实现发送手机验证码功能_java图片验证码,希望能够帮助大家进步!!!

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

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

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

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

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

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

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

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()+""; 即可。

 

知秋君
上一篇 2024-07-03 15:32
下一篇 2024-07-03 15:32

相关推荐