对接阿里云短信接口

阿里云短信服务

简单说明

之前使用过阿里的阿里大于这个短信代发服务,今天使用的是阿里云最新的一个短信代发服务,文档真的有点不详细,加上网上的博客也太少了,几经蹉跎还是把它给搓出来了,供大家学习

阿里云短信

首先没用过的玩家需要去阿里云注册账户,然后开启两个私钥,这两个密钥是我们的必需品

然后去申请签名和模版,这个也是我们的必需品

现在不怎么好申请了,建议申请理由都写成个人项目测试啥的,过不了就多申请几次,我申了三次才ojbk!

上面两个环境已经装备好了的你,怎么可以吃霸王餐呢?当然是充钱进去呀,找到充值入口,随便充点钱进去 (一块钱其实就可以了!哭)

官方文档阅读

官方提供了文档说明、ApiDemo、入参出参说明,这个还是比较详细的,但你以为你就能跑起来的话,我信你个鬼哦!

唯一需要注意的地方就是上图中我圈出来的这个地方,它的值是我们发送验证码的值,是一个Json格式 :{"code":"值"}

至于入参和出参可以参考官方文档,很多Api都变化了,其实我也记不起以前的api了,哈哈哈哈.....

Java工程

创建一个SpringBoot工程,按部就班。

最终的项目目录结构为:

pom.xml

   <dependencies>
        <!--@ConfigurationProperties 注解所需,不给报错-->
        <dependency>
            <groupId> org.springframework.boot </groupId>
            <artifactId> spring-boot-configuration-processor </artifactId>
            <optional> true </optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--阿里短信官网提供的依赖-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.3</version>
        </dependency>
        <!--MQ的依赖,本列子不是用MQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!--Json转换工具类-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.30</version>
        </dependency>
    </dependencies>

日志的配置文件,这就不放了,SpringBoot的配置文件为application.yml

server:
  port: 8888
spring:
  application:
    name: sms_test
ccl:
  sms:
    accessKeyId: LTAI4Fh2EXgX41J5UxcrBA7A            # accessKeyId
    accessKeySecret: qnFgRSqmF4aM4f2aNoCOzLxkzyNRP8  # AccessKeySecret
    signName: 个人博客                  # 签名名称
    verifyCodeTemplate: SMS_175051234  # 模板编号
logging.level.org.springframework.boot.autoconfigure: ERROR 

配置类

package com.test.sms.config;
?
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
?
/**
 * @Author [email protected]
 * @Description //装载配置文件的属性类
 * @Date 2019/10/7
 * @Param
 * @return
 **/
@Data
@Component
@ConfigurationProperties(prefix = "ccl.sms")
public class SmsConfig {
    String accessKeyId;
    String accessKeySecret;
    String signName;
    String verifyCodeTemplate;
}

被封装的阿里云短信接口

?
package com.test.sms.utils;
?
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;
import com.test.sms.config.SmsConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
?
/**
 * @Author [email protected]
 * @Description 封装阿里提供的短信发送接口
 * @Date 2019/10/7
 * @Param
 * @return
 **/
@Component
@EnableConfigurationProperties(SmsConfig.class)
public class SendUtils {

    @Autowired
    private  SmsConfig smsConfig;

    //发送短信的方法
    public  CommonResponse send(String phone,String code)throws ClientException {

        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
?
        DefaultProfile profile = DefaultProfile.getProfile("default",smsConfig.getAccessKeyId() , smsConfig.getAccessKeySecret());
        IAcsClient client = new DefaultAcsClient(profile);
?
        //封装请求对象
        CommonRequest request = new CommonRequest();
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setAction("SendSms");
        request.setVersion("2017-05-25");
        request.setMethod(MethodType.POST);
        //确定发送的电话号码和 验证码
        request.putQueryParameter("PhoneNumbers", phone);     //这里也得注意,对应的值是Json格式的字符串,不然就是一杯茶一根烟,一个bug玩一天
        request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");
        //确定是的模版和签名
        request.putQueryParameter("SignName", smsConfig.getSignName());
        request.putQueryParameter("TemplateCode", smsConfig.getVerifyCodeTemplate());
        //发起调用
        try {
            CommonResponse response = client.getCommonResponse(request);
            return response;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }
}

service

package com.test.sms.service;
?
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.exceptions.ClientException;
import com.test.sms.utils.SendUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
?
import java.util.Map;
?
@Service
public class SmsService {
?
    static final Logger LOGGER = LoggerFactory.getLogger(SendUtils.class);

    @Autowired
    private SendUtils sendUtils;

  public CommonResponse send(String phone,String code) throws ClientException {
      CommonResponse response = sendUtils.send(phone,code);
      if (response != null && response.getHttpStatus() == 200){
          String data = response.getData();
          Map map = JSON.parseObject(data, Map.class);
          LOGGER.info("短信发送状态:{}" + phone + "=====" + code + "=====" + map.get("Message"));
      }

      //以下为Api的测试代码,不做理会即可
      boolean success = response.getHttpResponse().isSuccess();  //true
      int status = response.getHttpResponse().getStatus(); //200
      int httpStatus = response.getHttpStatus(); //200
      return response;
  }
}

SpringMVC

package com.test.sms.controller;
?
import com.aliyuncs.CommonResponse;
import com.aliyuncs.exceptions.ClientException;
import com.test.sms.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
?
import java.util.Random;
/**
 * @Author [email protected]
 * @Description
 * @Date 20:09 2019/10/7
 * @Param
 * @return
 **/
@RestController
@RequestMapping("/sms")
public class cmsController {

    @Autowired
    private SmsService smsService;

    @GetMapping("/send/{number}")
    public CommonResponse cmsSend(@PathVariable String number) throws ClientException {

        //随机产生6位验证码
        StringBuffer code = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i<6; i++){
            int j = random.nextInt(10);
            code.append(j);
        }
        return smsService.send(number,code.toString());
    }
}

postman启动

更多的数据我们就不看,我们看一下关键部位响应结果即可:

完!

原文地址:https://www.cnblogs.com/msi-chen/p/11632065.html

时间: 2024-07-29 07:03:04

对接阿里云短信接口的相关文章

THINKPHP3.2.3增加阿里云短信接口思路整理

https://help.aliyun.com/document_detail/55359.html?spm=5176.product44282.4.7.O4lc1n 阿里云短信服务地址,感冒的下载看看 1 文件存放位置的问题 阿里云的短信接口 属于第三方扩展 所以文件放在 thinkphp\vendor\ 比如起名message 把SDK的文件都存到里面 2 把实现功能的代码 写好 放在message目录 不过注意文件的路径 代码里面的文件头 引用的文件地址用类似的 require_once

TP3.2.3 接入阿里sms 短信接口

阿里云短信接口 配置文件 config.php //阿里大鱼 'Ali_SMS' =>array( 'sms_temp' =>'短信模板', 'sms_sign' =>'签名', 'appkey' =>'appkey', 'secretKey'=>'secretKey', ), TestController.php Vendor('alisms.Alisms'); $alisms = new \Alisms(C('Ali_SMS.appkey'),C('Ali_SMS.sec

thinkphp5 阿里云短信 发送多参数的短信

有的朋友用阿里oss的时候可能会发送多参数的短信, 例如短信模版是  您好${code1},收到您的联系方式${code2},您的地址为${code3},我们会尽快派送. 类似于这样的多参数模版,首先第一关,可能是参数过长,怎么办,直接去阿里申请售后就可以了,和他们反馈一下,然后他们会给你把字数限制解除,然后你就可以传递超过20个字的内容了. 这一步完事,下一步就是接入阿里oss了,首先下载阿里oss的 类包了,去阿里官网下载就可以了,我这里整合的是thinkphp5.下载完成后具体步骤如下 1

阿里云短信服务报错org.json.JSONArray.iterator()Ljava/util/Iterator

maven依赖如下: <!-- 阿里云短信sdk --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version> </dependency> <dependency> <groupId>com.aliyun

发送短信验证码-node+阿里云短信

一.准备工作 前端: 表单 提交方式--- get .post 整体提交 ajax提交 表单验证 正则表达式---不轻易自己写正则,不是不写,一定要考虑好兼容性(全面性)---- 提示信息的选择性 图形验证码 后端进行提供的一张图片,并且这张图片会对应一个字段,这个字段传递给前端,前端负责校验即可 短信验证码 判断是不是手机号 如果是,那么就发送此手机号給后端,后端继续进行操作 第三方登录 qq登录,微信登录,微博登录 appid appsecret appkey 后端: get url.par

调用阿里云短信服务

package com.example.demo.untils; /** * Created by JQY on 2019/5/15 */ import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.Send

阿里云短信验证_基于阿里云OpenAPI实现

阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单的来说,原来的短息服务,只需应用申请获取短信,短息服务器会发送短信到指定的手机,用户将验证码发送到短信服务商的服务器,服务器做出验证返回是否通过,而阿里云仅提供短信发送服务,需要自己开发短信的验证.下面简单的介绍一下: 1.获取阿里云AccessKey 用户->Accesskeys:需要自己创建一个

yii2 阿里云 短信服务 aliyun_dysms [ 2.0 版本 ]

安装 1 composer require "saviorlv/yii2-dysms:dev-master" or添加下列代码在composer.json文件中并执行composer update 操作 1 2 3 4 5 { "require": { "saviorlv/yii2-dysms":"dev-master" } } 设置方法 全局使用 在config/main.php配置文件中定义component配置信息 1

阿里大鱼短信接口整合Tp3.2.3开发整理

阿里大鱼 http://www.alidayu.com/ 的短信接口总体是不错的,别安驹个人认为不管是从性价比还是稳定性上都是跟同类的短信接口好些,毕竟是大公司的东西不会差到哪去.下面把之前开发的短信接口做个整理. 1,登陆阿里大鱼的管理中心新增自己的应用,然后使用什么模板请提交审核,此处不做多说. 2,核心步骤,整理阿里大鱼给出的php示例核心包,不过别安驹已经为你整理好了只需要下载即可  核心包传送门 (ps:解压密码:http://www.bieanju.com/). 3,前台调用发送短信