java发送网易云短信验证码(语音和短信)

1,先拷贝架包

commons-codec
commons-codec
1.10

org.apache.httpcomponents
httpclient
4.5.2

org.apache.commons
commons-lang3
3.4

com.alibaba
fastjson
1.2.7

javax.servlet
servlet-api
2.5
provided

2,创建生成验证码的类
package com.baizhi.util.wyy;

import java.security.MessageDigest;

/**
*

  • 生成验证码工具类 网易
    */
    public class CheckSumBuilder {
    // 计算并获取CheckSum
    public 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) {
    throw new RuntimeException(e);
    }
    }

    private static String getFormattedText(byte[] bytes) {
    int len = bytes.length;
    StringBuilder buf = new StringBuilder(len * 2);
    for (int j = 0; j < len; j++) {
    buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
    buf.append(HEX_DIGITS[bytes[j] & 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’};
    }
    3,网易发送验证码工具类

package com.baizhi.util.wyy;

import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**

  • 网易发送验证码
  • @author Pengyl

*/
public class SendCode1 {
//发送验证码的请求路径URL
//1,通知类短信,请求的URL(https://api.netease.im/sms/sendtemplate.action )
//2,运营类短信,请求的URL(https://api.netease.im/sms/sendtemplate.action )
//3,验证码短信,请求的URL(https://api.netease.im/sms/sendcode.action )
private static final String
SERVER_URL=“https://api.netease.im/sms/sendcode.action”;
//网易云信分配的账号,请替换你在管理后台应用下申请的Appkey
private static final String
APP_KEY=“2bc0a2711b62fa8adb1c412166b64c1a”;
//网易云信分配的密钥,请替换你在管理后台应用下申请的appSecret
private static final String APP_SECRET=“84f57b6f3195”;
//随机数
private static final String NONCE=“123456”;
//短信模板ID
//这个地方默认的是语音验证码,可以创建短信模板,大概3天之内审核
private static final String TEMPLATEID=“9294239”;

//验证码长度,范围4~10,默认为4
private static final String CODELEN="6";public static String senCode(String phone) throws Exception{HttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(SERVER_URL);String curTime = String.valueOf((new Date()).getTime() / 1000L);/** 参考计算CheckSum的java代码,在上述文档的参数列表中,有CheckSum的计算文档示例*/String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);// 设置请求的header//开发者平台分配的appkeyhttpPost.addHeader("AppKey", APP_KEY);//随机数(最大长度128个字符)httpPost.addHeader("Nonce", NONCE);//  当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String)httpPost.addHeader("CurTime", curTime);//SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)httpPost.addHeader("CheckSum", checkSum);httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// 设置请求的的参数,requestBody参数List<NameValuePair> nvps = new ArrayList<NameValuePair>();/** 1.如果是模板短信,请注意参数mobile是有s的,详细参数配置请参考“发送模板短信文档”* 2.参数格式是jsonArray的格式,例如 "['13888888888','13666666666']"* 3.params是根据你模板里面有几个参数,那里面的参数也是jsonArray格式*/nvps.add(new BasicNameValuePair("templateid", TEMPLATEID));nvps.add(new BasicNameValuePair("mobile", phone));nvps.add(new BasicNameValuePair("codeLen", CODELEN));httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));// 执行请求HttpResponse response = httpClient.execute(httpPost);/** 1.打印执行结果,打印结果一般会200、315、403、404、413、414、500* 2.具体的code有问题的可以参考官网的Code状态表*/String string = EntityUtils.toString(response.getEntity(), "utf-8");String code =  JSON.parseObject(string).getString("code");if(code.equals("200")){// 成功System.out.println("发送成功,验证码为:"+JSON.parseObject(string).getString("obj"));return "SUCCESS";}else{return "ERROR";}
}

}
4,网易校验验证码工具类
package com.baizhi.util.wyy;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**

  • 网易校验验证码工具类

  • @author Administrator
    */
    public class MobileMessageCheck {
    private static final String SERVER_URL = “https://api.netease.im/sms/verifycode.action”;//校验验证码的请求路径URL
    private static final String APP_KEY = “5bc098dac74e4036de56617552e02447”;//网易云信分配的账号
    private static final String APP_SECRET = “d42974b591d4”;//网易云信分配的密钥
    private static final String NONCE = “123456”;//随机数

    public static String checkMsg(String phone, String code) throws IOException {

     CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost post = new HttpPost(SERVER_URL);String curTime = String.valueOf((new Date().getTime() / 1000L));String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);//设置请求的headerpost.addHeader("AppKey", APP_KEY);post.addHeader("Nonce", NONCE);post.addHeader("CurTime", curTime);post.addHeader("CheckSum", checkSum);post.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");//设置请求参数List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();nameValuePairs.add(new BasicNameValuePair("mobile", phone));nameValuePairs.add(new BasicNameValuePair("code", code));post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));//执行请求HttpResponse response = httpclient.execute(post);String responseEntity = EntityUtils.toString(response.getEntity(), "utf-8");System.out.println(responseEntity);// msg   obj  //判断是否发送成功,发送成功返回trueString codeMessage = JSON.parseObject(responseEntity).getString("code");if (codeMessage.equals("200")) {return "SUCCESS";}return "ERROR";
    

    }
    }
    5,写controller方法调用接口实现短信验证码

java发送网易云短信验证码(语音和短信)相关推荐

  1. 网易云信短信接口java,调用网易云短信验证码接口Demo

    最近在开发新的项目,因为需要使用验证码验证这个功能.我选择的是 网易云 的验证码接口.免费使用20条.并且在正式使用的过程中,对比了很多家以后,感觉还是他家的便宜.因为随着你购买的短信包数量的增加,价 ...

  2. java实现网易云短信接口

    httpclient-4.3.6.jar和httpcore-4.3.3.jar jar包 首先去网易云注册账号得到分配的app key 和 App Secret  开通短信有20条试用.使用的是htt ...

  3. Java PHP Python实现短信验证码和国际短信群发功能

    最近由于公司的业务拓展,需要给国外用户发送国际短信,像西班牙.葡萄牙.意大利这些国家都要发,还有中国的香港.澳门.台湾(港澳台)这些地区也要发,不过现在已经有许多公司提供国际短信的业务了,之前使用过云 ...

  4. Java实现短信验证码(阿里云短信服务)

    前言: 很多时候我们做的项目都需要上图这样的验证码来帮助我们完成更好的功能,比如:什么登录注册,忘记密码需要发送手机验证码之类的啊...下面分享我今天通过阿里云短信服务实现的短信验证码,操作都很简单, ...

  5. java 登陆短信验证码_Java实现短信验证码

    原标题:Java实现短信验证码 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 短信验证码 短信验证码都是调 ...

  6. 使用阿里云短信验证码API发送短信验证码(配置,获取短信验证码,注册,登录,密码重置)

    获取阿里云短信验证码需要的配置信息. 如果是新用户,可以免费领取3个月,老用户的话就只能购买了,但是也不贵. 申请短信签名 申请短信模板 编写发送短信验证码的工具类 代码中我已经进行了详细的注释,也写 ...

  7. 网易云易盾验证码海外版发布,支持12种主流语言

    随着市场逐渐成熟,人口红利逐渐消失,越来越多的中国互联网产品走向海外,据<中国移动互联网出海环境全揭秘报告>,2017年Q4中国互联网出海企业就达到720多家,出海应用2268个,2018 ...

  8. android短信验证码代码,Android短信验证码自动填写实现代码

    今天给大家分享一个Android短信验证码自动填写的功能.先看下效果图,我发送了一条短信到手机,自动填写验证码.如图: 这个小功能运用到了观察者模式,什么是观察者模式? 观察者模式 :定义对象间的一种 ...

  9. 短信验证码java_Java实现短信验证码

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 短信验证码 短信验证码都是调用一些接口来进行短信的发送,短信 ...

最新文章

  1. nova resize代码调用部分分析
  2. Unity 3D 离线协议
  3. 瑞文标准推理测试软件,瑞文标准推理测验标准答案表
  4. python运行py文件参数错误_Pycharm运行加载文本出现错误的解决方法
  5. nodejs v8引擎
  6. [blog摘要]Exploring and Decoding ETW Providers using Event Log Channels
  7. Xamarin.Android 开发中遇到旋转屏幕错误
  8. 从零开始编写自己的C#框架(27)——什么是开发框架
  9. ORACLE 全文搜索(精度高排前)
  10. 最长路径算法 c语言_「算法」求二叉树的最长同值路径
  11. platform设备的添加
  12. 透视形变及其校准的方法
  13. Day_05显示变量的值
  14. 北理计算机2017,←2017 计算机学院 2019→
  15. 基于winsock的局域网聊天室实现
  16. EMV交易中的SDA/DDA/CDA——SDA部分
  17. 什么是MySQL数据库及MySQL的优势
  18. 水果店圈子:水果店水果都去哪进货,水果店进货怎么找货源
  19. 月薪3500的我,是怎样把自己 “逼”成月入十万的?
  20. 什么是Voice VLAN?光纤网络交换机如何配置

热门文章

  1. 基于STM32F407 TFTP远程升级(局域网)
  2. 水文自动测报系统服务器租用费,水文自动测报系统,水雨情自动测报系统
  3. gojs给线添加鼠标移上去显示内容的事件,类似title属性
  4. 大数据监测:肯德基中国正在悄悄涨价
  5. ★★智驾/智舱域控制器
  6. 10秒去除WPS Office弹窗广告教程(2023.3.31最新)
  7. 如何在子类中调用父类的函数
  8. 视频消息沟通,我的工作总是快人一步,感谢帧想
  9. 360手机用鸿蒙系统,真正意义上的国产操作系统来了,360宣布率先适配华为鸿蒙系统...
  10. Master PDF Editor(PDF编辑工具)v5.4.04中文免费版