一、准备工作

  • 聚合数据 首先在聚合数据官网中进行注册
  • 然后申请短信API服务,初次使用赠送5次

grpc做数据聚合查询 聚合数据api教程_java

  • 申请成功之后,AppKey特别重要,不要让别人知道,然后再点击模板

grpc做数据聚合查询 聚合数据api教程_java_02

  • 点击模板,填写模板内容,要申请通过,不通过拿不到模板ID。最主要是要得到模板ID,这是要发送到你手机上的内容

grpc做数据聚合查询 聚合数据api教程_apache_03

  • 这些弄好后可以写代码测试呢

二、短信API接口需要了解的地方

  • 查看聚合数据中短信API接口,需要接口地址请求参数(如果你要用请求示例的地址栏进行请求也是可以的)

grpc做数据聚合查询 聚合数据api教程_java_04

  • 请求返回的数据

grpc做数据聚合查询 聚合数据api教程_apache_05

三、写代码实现

1.Demo中使用的是httpclient包

  • HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

2.创建项目java发送短信Demo链接

  • 创建一个项目
  • 在pom文件引入httpclient依赖
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.8</version>
</dependency>
  • 项目图,创建一个MyHttpClientDemo文件

grpc做数据聚合查询 聚合数据api教程_java_06

  • MyHttpClientDemo代码:
package com.ming;

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
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;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyHttpClientDemo {

    public static String doPost(String url, Map<String, String> params) {
        //创建一个httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //返回参数
        String result = "";
        //构建响应对象
        CloseableHttpResponse response = null;
        try {

            //构建post请求
            HttpPost post = new HttpPost(url);


            if (params != null){
                //构建参数
                List<NameValuePair> paramList = new ArrayList<>();
                for (Map.Entry<String,String> param: params.entrySet()){
                    paramList.add(new BasicNameValuePair(param.getKey(),param.getValue()));
                }
                //模拟表单对象
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(paramList, Charset.defaultCharset());
                post.setEntity(formEntity);
            }

            response = httpClient.execute(post);
            result = EntityUtils.toString(response.getEntity(), Charset.defaultCharset());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(httpClient,response);
        }

        return result;
    }


    private static void close(CloseableHttpClient httpClient, CloseableHttpResponse response){
        try {
            if (response != null){
                response.close();
            }

            if (httpClient != null){
                httpClient.close();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Map<String, String> params = new HashMap<String, String>();
        params.put("mobile","自己的手机号码");				//填写自己的手机号码
        params.put("tpl_id","211907");					//提写自己的短信模板ID
        params.put("tpl_value","%23code%23%3d5643");	//5643是验证码,可以自己随便填写
        params.put("key","自己的AppKey");				//这里写自己的AppKey
        params.put("dtype","json");					//返回的是json格式的数据
        System.out.println(MyHttpClientDemo.doPost("http://v.juhe.cn/sms/send",params));
    }
}
  • 运行代码,看到控制台打印输出这个,证明发送验证码成功呢

grpc做数据聚合查询 聚合数据api教程_验证码_07

  • 手机上会收到短信验证码

grpc做数据聚合查询 聚合数据api教程_验证码_08

  • 完成

四、将验证码存储到Redis中(大概步骤)

  • 用户进入到注册页面,有手机号,密码,验证码,点击获取验证码时,把手机号作为参数请求服务器端的验证码功能方法的url
  • 服务器端首先根据传过来的手机号码,从redis中通过手机号码(key)获取验证码(value),如果验证码查询到说明验证码没有过期
  • 如果没有在redis中通过手机号码查询到验证码,说明验证码不存在或者说已经过期
  • 此时通过UUID随机生成4位数字,存储到redis中
  • 然后将手机号码验证码作为参数,调用短信API的代码,通过运营商发送给用户
  • 如果发送成功,将手机号码和验证码及其过期时间存储到redis中
  • 如果失败,则提示用户发送短信失败,请再次发送
  • 用户点击注册按钮,通过用户传过来的手机号码和输入的验证码,在redis中通过手机号码查询验证码,该验证码用户传过来的验证码进行比较,如果相等,则重定向到登录页面,增加用户体验