赞
踩
本文主要针对与使用Java集成第三方进行短信发送,市场上常见的第三方短信发送有很多,比如阿里云,华为云等等。但是申请的步骤和代码大同小异,下面以榛子云为例详细介绍下如何操作。
首先去榛子云官方平台申请注册自己的账号,官方网站
http://sms_developer.zhenzikj.com/zhenzisms_user/
有账号的话就直接登录,没有注册一个即可,很简单的注册
登录成功后就是这个样子,官方提供免费发送一条,需要自行充值,20起步,差不多一条短信3毛钱
密钥在用户注册登录后会自动生成,可进行重置操作
在"应用管理"——>"我的应用"里,AppId,AppSecret,这都是用户的唯一标识,很重要,一会在Java代码中要用到
在"短信管理"——>"短信模板"中可以看到自己要发送的短信模板,会有自己默认的模板,当然也可以自己新建自定义模板,不要违规就好,这边需要注意的是审核状态,审核通过后可以发送短信,我遇到好几次出错都是因为我新建的模板还没审核通过就发送,所以一直失败,这也是我后面想到的
接下来就引入相关依赖并编写接口测试。
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!--榛子云提供短信接口平台-->
<dependency>
<groupId>com.zhenzikj</groupId>
<artifactId>zhenzisms</artifactId>
<version>2.0.2</version>
</dependency>
其实封装一下会比较好,比如短信模板应该作为方法参数,根据不同的业务进行不同的短信模板发送,而且发送短信的逻辑应该写在service中,这里写的比较粗糙,只是为了实现功能,后续会完善
package com.wyh.controller;
import com.alibaba.fastjson.JSONObject;
import com.zhenzi.sms.ZhenziSmsClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
/**
* @description: 短信发送
* @author: wyh
* @createDate: 2021-04-27 22:24
**/
@Controller
public class SendCodeController {
//短信平台相关参数
//这个不用改
private String apiUrl = "https://sms_developer.zhenzikj.com";
//榛子云系统上获取
private String appId = "xxx";
private String appSecret = "xxxx";
@ResponseBody
@RequestMapping("/sendCode")
public boolean sendCode(String memPhone, HttpSession httpSession){
try {
//短信发送需要的参数是json类型
JSONObject json = null;
//随机6位生成验证码
String code =String.valueOf(ThreadLocalRandom.current().nextInt(100000, 1000000));
//构建榛子客户端
ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret);
//参数类型
Map<String, Object> params = new HashMap<String, Object>();
//前台输入的手机号
params.put("number", memPhone);
//这个模板id对应的是榛子云个人中心的模板id
params.put("templateId", xxx);
//参数占位符,不同的模板有不同的参数个数 目前用的模板有两个参数 可以使用jsonObject去操作
String[] templateParams = new String[2];
//第一个参数 随机生成的六位验证码
templateParams[0] = code;
//第二个参数 x分钟
templateParams[1] = "5";
//把参数占位符放在整体参数中
params.put("templateParams", templateParams);
//执行发送短信
String result = client.send(params);
System.out.println(result);
json = JSONObject.parseObject(result);
发送短信失败
if (json.getIntValue("code")!=0){
return false;
}
//将验证码存到redis中并设置ttl
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
接口写完了之后,就可以测试了,我这里写了一个简陋的页面,当然也可以用postman等工具
其实用阿里云会更好,价格比较便宜,但是申请起来比较麻烦,代码和步骤都十分相似
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。