java 调用阿里云短信接口 20252658编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

java 调用阿里云短信接口
Created by Marydon on 2022-06-02 16:29
1.情景展示
阿里云短信接口调用,如何用java实现?
2.具体分析
先去阿里云申请账号,拿到分配的秘钥,以及配置好短信模板。
所需jar包
<!-- 阿里云短信 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.0</version> <exclusions> <exclusion> <artifactId>gson</artifactId> <groupId>com.google.code.gson</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.9.0</version> </dependency>
如果需要最新版,去maven中央仓库获取即可:https://mvnrepository.com/
3.具体实现
先搞一个参数配置实体类;
import lombok.*; import lombok.experimental.Accessors; import java.util.Map; /** * 短信配置类 * @description: * @author: Marydon * @date: 2022-06-02 9:41 * @version: 1.0 * @email: marydon20170307@163.com */ @Builder @Accessors(chain = true) @Setter @Getter public class MsgConfig { // 发送短信的产品 @Builder.Default private String product = "Dysmsapi"; // 发送短信的域名 @Builder.Default private String domain = "dysmsapi.aliyuncs.com"; // 区域ID @Builder.Default private String regionId = "cn-hangzhou"; // AccessKey ID private String accessKeyId; // AccessKey Secret private String secret; // 短信签名 @Builder.Default private String signName = "阿里云"; // 短信模板CODE private String templateCode; // 接收短信的手机号 private String phone; // 动态配置的模板参数名称及参数值 private Map<String, String> templateParams; // 短信发送成功/失败(默认值:false) private boolean isSuccess; // 短信发送成功/失败 信息 private String message; @Override public String toString() { return "MsgConfig{" + "product='" + product + '\'' + ", domain='" + domain + '\'' + ", regionId='" + regionId + '\'' + ", accessKeyId='" + accessKeyId + '\'' + ", secret='" + secret + '\'' + ", signName='" + signName + '\'' + ", templateCode='" + templateCode + '\'' + ", phone='" + phone + '\'' + ", templateParams=" + templateParams + ", isSuccess=" + isSuccess + ", message='" + message + '\'' + '}'; } public static void main(String[] args) { System.out.println(MsgConfig.builder().build().isSuccess); } }
说明:
短信签名,与你注册账号时的签名保持一致,而且调短信接口的时候,不能随意更改,否则,会提示:
该账号下找不到对应签名。
具体实现:
import code.marydon.encapsulation.dataType.MapBuilder; import code.marydon.encapsulation.dataType.StringUtils; import com.alibaba.fastjson2.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.regions.ProductDomain; import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; /** * 阿里云短信工具类 * @description: * @author: Marydon * @date: 2022-05-31 16:02 * @version: 1.0 * @email: marydon20170307@163.com */ @Slf4j public final class AliYunMsgUtils{ // 私有化构造方法(防止外部实例化) private AliYunMsgUtils() {} private static AliYunMsgUtils msgUtils = null; // 单例 public static AliYunMsgUtils getInstance() { return msgUtils == null ? new AliYunMsgUtils() : msgUtils; } // AccessKey ID private final String ACCESS_KEY_ID = "ID"; // AccessKey Secret private final String ACCESS_KEY_SECRET = "秘钥"; // 短信模板CODE private final String TEMPLATE_CODE = "SMS_210079199"; /* * 发送短信 * @description: * @date: 2022/6/1 15:43 * @param: config 初始化参数 * @return: code.marydon.encapsulation.msg.MsgConfig 返回它自己,方便后期调试 */ @NotNull public static MsgConfig sendMsg(MsgConfig config) { try { AliYunMsgUtils aliYunMsgUtils = AliYunMsgUtils.getInstance(); String accessKeyId; if (StringUtils.isEmpty(config.getAccessKeyId())) { accessKeyId = aliYunMsgUtils.ACCESS_KEY_ID; config.setAccessKeyId(accessKeyId); } else { accessKeyId = config.getAccessKeyId(); } String accessKeySecret; if (StringUtils.isEmpty(config.getSecret())) { accessKeySecret = aliYunMsgUtils.ACCESS_KEY_SECRET; config.setSecret(accessKeySecret); } else { accessKeySecret = config.getSecret(); } DefaultProfile profile = DefaultProfile.getProfile(config.getRegionId(), accessKeyId, accessKeySecret); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); // 固定值(必须配置) request.setSysProductDomain(new ProductDomain(config.getProduct(), config.getDomain())); request.setSignName(config.getSignName()); String templateCode; if (StringUtils.isEmpty(config.getTemplateCode())) { templateCode = aliYunMsgUtils.TEMPLATE_CODE; config.setTemplateCode(templateCode); } else { templateCode = config.getTemplateCode(); } request.setTemplateCode(templateCode); // 设置接收短信的手机号 request.setPhoneNumbers(config.getPhone()); // 模板变量集合,在阿里云当中${name}配置 request.setTemplateParam(new Gson().toJson(config.getTemplateParams())); // 调用 SendSmsResponse response = client.getAcsResponse(request); // 返回结果 JSONObject json = JSONObject.parseObject(new Gson().toJson(response)); log.info(json.toString()); config.setSuccess(json.get("code").equals("OK")); config.setMessage((String) json.get("message")); } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); config.setMessage(e.getMessage()); } return config; } }
调用:
public static void main(String[] args) { // 配置短信参数 MsgConfig msgConfig = MsgConfig.builder().build() .setPhone("手机号") .setSignName("博客园") .setTemplateCode("SMS_210079199") .setTemplateParams(MapBuilder.build().put("模板参数", "1234").get()); // 发送短信 msgConfig = sendMsg(msgConfig); // 打印结果 System.out.println(msgConfig.toString()); }
阿里云接口返回结果,如下:
{"requestId":"6633E9B9-FF9B-52ED-907B-EDB6D7CC6F45","bizId":"207611654156631160^0","code":"OK","message":"OK"}
调用阿里云接口,实际请求遵照以下格式:
http://dysmsapi.aliyuncs.com/?PhoneNumbers=接收短信的手机号&Action=SendSms&Timestamp=2022-06-02T07%3A57%3A10Z&SignName=%E9%83%91%E5%B7%9E%E6%96%B0%E7%9B%8A%E5%8D%8E&TemplateCode=SMS_210079199&SignatureVersion=1.0&Format=JSON&SignatureNonce=e8a9e05b-b72d-48b0-852a-b35a6bfcbf9716541566309211&Version=2017-05-25&AccessKeyId=你的KEY&Signature=QYBqUP%2Fx9Q8%2BNSR8KMniwUbYqJQ%3D&SignatureMethod=HMAC-SHA1&TemplateParam=%7B%22模板变量名称%22%3A%221234%22%7D&RegionId=cn-hangzhou
如果我们拿着这个链接,去网页请求,会得到如下结果:
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/16338191.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2017-06-02 js Cookie
2017-06-02 js 根据身份证获取出生日期、性别及年龄