Java接入阿里云验证码短信服务体验

2,869 阅读3分钟

申请阿里云短信服务

打开阿里云的控制台,在产品与服务中找到云通讯,并选择短信服务

然后会有一个新手接入的教程,这边直接跟着快速学习了解一下短信服务的基本流程,快速学习下面有短信测试的Demo,可以尝试一下,前提是得再阿里云里有余额,本地每条短信0.04元已近很良心价了呢

再使用之前,肯定是先添加自己验证短信的签名和模板,这些在快速学习中有提到,只是申请需要1个小时左右的审核时间。

趁着审核的这段时间,感觉看看短信服务的开发文档,java向阿里云请求短信服务的参数

请求参数

名称 类型 是否必选 示例值 描述
PhoneNumbers String 15900000000 接收短信的手机号码。格式:国内短信:11位手机号码,例如15951955195。国际/港澳台消息:国际区号+号码,例如85200000000。支持对多个手机号码发送短信,手机号码之间以英文逗号(,)分隔。上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。说明 验证码类型短信,建议使用单独发送的方式。
SignName String 阿里云 短信签名名称。请在控制台签名管理页面签名名称一列查看。说明 必须是已添加、并通过审核的短信签名。
TemplateCode String SMS_153055065 短信模板ID。请在控制台模板管理页面模板CODE一列查看。说明 必须是已添加、并通过审核的短信签名;且发送国际/港澳台消息时,请使用国际/港澳台短信模版。
AccessKeyId String LTAIP00vvvvvvvvv 主账号AccessKey的ID。
Action String SendSms 系统规定参数。取值:SendSms
OutId String abcdefgh 外部流水扩展字段。
SmsUpExtendCode String 90999 上行短信扩展码,无特殊需要此字段的用户请忽略此字段。
TemplateParam String {"code":"1111"} 短信模板变量对应的实际值,JSON格式。说明 如果JSON中需要带换行符,请参照标准的JSON协议处理。

返回参数

名称 类型 示例值 描述
BizId String 900619746936498440^0 发送回执ID,可根据该ID在接口QuerySendDetails中查询具体的发送状态。
Code String OK 请求状态码。返回OK代表请求成功。其他错误码详见错误码列表
Message String OK 状态码的描述。
RequestId String F655A8D5-B967-440B-8683-DAD6FF8DE990 请求ID。

然后我们的先去控制台,等签名和模板都审核通过后就可以直接使用了

短信服务在java中的使用

首先得导入阿里云短信服务的maven依赖

<!--阿里短信服务-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.1.0</version>
</dependency>

分装一个短信服务的工具类

package com.drxzt.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

/**
 * className MassageUtil
 * description TODO
 *
 * @author DR XZT
 * @version 1.0
 * @date 2019/7/18 10:15
 */
public class MassageUtil extends BaseUtil {

    private static final String ACCESS_KEY_Id = "AsccessKeyID";
    private static final String ACCESS_KEY_SECRET = "AsccessKeySecret";
    private static final String REGION_ID = "cn-hangzhou";
    private static final String SIGN_NAME = "短信签名";
    private static final String TEMPLATE_CODE = "短信模板code";


    public static void main(String[] args) {
        System.out.println(senMassage("phoneNum"));
    }

    public static JSONObject senMassage(String phoneNumber) {
        JSONObject result = new JSONObject();
        //随机生成6位验证码
        String code = String.valueOf((int) (Math.random() * 10000 + 10000)).substring(1);
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_Id, ACCESS_KEY_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("RegionId", REGION_ID);
        request.putQueryParameter("PhoneNumbers", phoneNumber);
        request.putQueryParameter("SignName", SIGN_NAME);
        request.putQueryParameter("TemplateCode", TEMPLATE_CODE);
        request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            result = JSON.parseObject(response.getData());
            result.put("verCode", code);
            return result;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return result;
    }
}

调用结果:

{     
        "Message": "OK",
        "RequestId": "080D4F9C-E89C-42C3-BFA7-0B944CA5D67E",
        "BizId": "400511863443876834^0",
        "Code": "OK",
        "verCode": "5988"
    }