iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用Java第三方实现发送短信功能
  • 142
分享到

怎么使用Java第三方实现发送短信功能

2023-07-05 16:07:14 142人浏览 薄情痞子
摘要

本文小编为大家详细介绍“怎么使用Java第三方实现发送短信功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java第三方实现发送短信功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、介绍在项目开发

本文小编为大家详细介绍“怎么使用Java第三方实现发送短信功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java第三方实现发送短信功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    一、介绍

    项目开发中,短信发送功能在很多地方都用得到,例如:通知短信、验证码、营销短信、推广短信等等,近期阿里云等云服务商的短信服务针对个人用户不友好(需求企业资质),现在给大家介绍一款的产品:乐讯通,针对个人用户较为友好,可以很便捷的进行开发测试

    二、使用步骤

    1. 平台注册

    使用手机号注册即可。

    注意:注册成功后,默认密码就是手机号。
    可在 “系统管理”->"密码管理"中进行密码的修改 。

    2. 短信签名和短信模板

    平时比较常见的验证码短信格式为:【码赛客1024】:注册验证码为312562,请勿泄露给他人。
    前面括号中的就是短信签名,后边部分就是短信模板,因此可以分析出格式为:【短信签名】:短信模板。

    2.1 设置签名
    文字短信 -> 短信设置 -> 签名管理 -> 添加新的签名
    2.2 设置模板
    文字短信 -> 短信设置 -> 签名管理 -> 添加新的模板
    模板设置需要注意的是,模板中使用{}作为占位符,例如:
    【短信签名】:注册验证码为{s6},请勿泄露给他人。
    其中的{s6}会被替换为验证码,而6指的是字符最大长度,超过则无法发送。

    3. 基于官方api文档实现短信发送

    3.1 官方demo

    API文档 -> 开发引导 -> 代码示例 -> Java ,代码如下

    package com.ljs;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.Console;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.lang.reflect.MalfORMedParameterizedTypeException;import java.net.URL;import java.net.URLConnection;import java.security.MessageDigest;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Collection;import java.util.Collections;import java.util.Comparator;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.ListIterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import javax.lang.model.element.VariableElement;import javax.management.monitor.MonitorSettingException;import javax.print.attribute.standard.DateTimeAtCompleted;import org.junit.Test;public class MyTest {    public static void main(String[] args) throws ParseException {    //时间戳        long timestamp = System.currentTimeMillis();        System.out.println(timestamp);        //url        String url = "Http://www.lokapi.cn/smsUTF8.aspx";         //签名,在发送时使用md5加密        String beforSign = "action=sendtemplate&username=18586975869&passWord="+getMD5String("18586975869")+"&token=389c1a49&timestamp="+timestamp;        //参数串        String postData = "action=sendtemplate&username=18586975869&password="+getMD5String("18586975869")+"&token=389c1a49&templateid=CF2D56FC&param=18586975869|666666&rece=JSON&timestamp="+timestamp+"&sign="+getMD5String(beforSign);        //调用其提供的发送短信方法        String result = sendPost(url,postData);         System.out.println(result);    }      //发送短信的方法    public static String sendPost(String url, String param) {        PrintWriter out = null;        BufferedReader in = null;        String result = "";        try {            URL realUrl = new URL(url);            // 打开和URL之间的连接            URLConnection conn = realUrl.openConnection();            // 设置通用的请求属性            conn.setRequestProperty("accept", "*    public static String createSign(TreeMap<String, String> tm, String key) {        StringBuffer buf = new StringBuffer(key);        for (Map.Entry<String, String> en : tm.entrySet()) {            String name = en.geTKEy();            String value = en.getValue();            if (!"sign".equals(name) && !"param".equals(name) && value != null && value.length() > 0 && !"null".equals(value)) {                buf.append(name).append('=').append(value).append('&');            }        }        String _buf = buf.toString();        return _buf.substring(0, _buf.length() - 1);    }         public static String encodeBase64File(String path) throws Exception {          File file = new File(path);;          FileInputStream inputFile = new FileInputStream(file);          byte[] buffer = new byte[(int) file.length()];          inputFile.read(buffer);          inputFile.close();          //return new BASE64Encoder().encode(buffer);  return "";     }}
    3.2 文字短信-模板发送

    请求地址,UTF8编码请求地址:http://www.lokapi.cn/smsUTF8.aspx
    2.请求协议:http
    3.请求方式:采用post方式提交请求
    4.请求报文:action=sendtemplate&username=zhangsan&password=E10ADC3949BA59ABBE56E057F20F883E&token=894gbhy&templateid=638fgths&param=手机号1|参数1|参数2@手机号2|参数1|参数2&rece=json&timestamp=636949832321055780&sign=96E79218965EB72C92A54
    5.参数说明

    参数名称 是否必须 描述示例
    action操作类型(固定值)action=sendtemplate
    username账户名username=zhangsan
    password账户密码,密码必须MD5加密并且取32位大写password=E10ADC3949BA59ABBE56E057F20F883E
    token产品总览页面对应产品的Tokentoken=894gbhy
    templateid 模板管理报备的模板IDtemplateid=638fgths
    param 发送参数,可发送一个或多个手机号,建议单次提交最多5000个号码17712345678|张三|2541@13825254141|李四|2536
    dstime设置要发送短信的时间,精确到秒(yyyy-MM-dd HH:mm:ss)2017-01-05 16:23:23
    rece 否 返回类型json、xml,默认(json)rece=json
    timestamp 时间戳,13位时间戳,单位(毫秒)timestamp=636949832321055780
    sign签名校验sign=96E79218965EB72C92A54

    param参数详细说明

    发送一个手机号模板为【手机号1|参数1|参数2】
    发送多个手机号模板为【手机号1|参数1|参数2@手机号2|参数3|参数4@&hellip;】
    第一列必须为手机号,参数1,参数2对应短信模板里的参数顺序,英文竖线隔开, 比如短信模板为【签名】您好,{s6},您的验证码是:{s6},参数1就对应您好后边的{s6},参数2对应验证码是后边的{s6}, 多个手机号以@隔开。

    若模板内没有参数则只输入手机号即可。

    sign参数详细说明

    签名由参数action,username,password,token,timestamp进行MD5加密组成
    比如这些值拼接后为action=sendtemplate&username=zhangsan&password=E10ADC3949BA59ABBE56E057F20F883E&token=588aaaaa&timestamp=636949832321055780,那么就MD5加密这个参数字符串得到结果后作为sign的值sign=96E79218965EB72C92A54

    基于官方java代码和参数说明,替换自己的值,即可实现发送。

    返回结果

    //成功返回{    "returnstatus":"success",    "code":"0",    "taskID":[        {            "tel_17712345678":"15913494519502337"        }    ]}//失败返回{    "returnstatus":"error",    "code":"-51",    "remark":"访问超时!"}

    三、封装发送短信工具

    1.添加 fastjson 的依赖,用于把返回结果转为对象,方便处理。

    <dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.75</version></dependency>

    2.工具类如下

    public class SendSMSUtil {        public static MsgResult sendMsgPost(String account,String password,String token,String templateid,String phone,String code){        //时间戳        long timestamp = System.currentTimeMillis();        //System.out.println(timestamp);        //url        String url = "http://www.lokapi.cn/smsUTF8.aspx";        //签名        String beforSign = "action=sendtemplate&username="+account+"&password="+getMD5String(password)+"&token="+token+"&timestamp="+timestamp;        //参数串        String postData = "action=sendtemplate&username="+account+"&password="+getMD5String(password)+"&token="+token+"&templateid="+templateid+"&param="+phone+"|"+code+"&rece=json&timestamp="+timestamp+"&sign="+getMD5String(beforSign);        //发送请求        String result = sendPost(url,postData);        //将json结果转为对象,方便判断        MsgResult msgResult = JSON.parseObject(result, MsgResult.class);        return msgResult;    }    //原本的发送方法    public static String sendPost(String url, String param) {        PrintWriter out = null;        BufferedReader in = null;        String result = "";        try {            URL realUrl = new URL(url);            // 打开和URL之间的连接            URLConnection conn = realUrl.openConnection();            // 设置通用的请求属性            conn.setRequestProperty("accept", "*/*");            conn.setRequestProperty("connection", "Keep-Alive");            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; windows NT 5.1;SV1)");            // 发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            // 获取URLConnection对象对应的输出流            out = new PrintWriter(conn.getOutputStream());            // 发送请求参数            out.print(param);            // flush输出流的缓冲            out.flush();            // 定义BufferedReader输入流来读取URL的响应            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));            String line;            while ((line = in.readLine()) != null) {                result += line;            }        } catch (Exception e) {            System.out.println("发送 POST 请求出现异常!"+e);            e.printStackTrace();        } finally{  //使用finally块来关闭输出流、输入流            try{                if(out!=null){                    out.close();                }                if(in!=null){                    in.close();                }            }            catch(IOException ex){                ex.printStackTrace();            }        }        return result;    }    //用来计算MD5的函数    public static String getMD5String(String rawString){        String[] hexArray = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};        try{            MessageDigest md = MessageDigest.getInstance("MD5");            md.update(rawString.getBytes());            byte[] rawBit = md.digest();            String outputMD5 = " ";            for(int i = 0; i<16; i++){                outputMD5 = outputMD5+hexArray[rawBit[i]>>>4& 0x0f];                outputMD5 = outputMD5+hexArray[rawBit[i]& 0x0f];            }            return outputMD5.trim();        }catch(Exception e){            System.out.println("计算MD5值发生错误");            e.printStackTrace();        }        return null;    }}

    用于接收返回值的对象

    public class MsgResult{    //返回描述    private String returnstatus;    //返回状态码    private Integer code;    //错误消息    private String remark;    public String getReturnstatus() {        return returnstatus;    }    public void setReturnstatus(String returnstatus) {        this.returnstatus = returnstatus;    }    public Integer getCode() {        return code;    }    public void setCode(Integer code) {        this.code = code;    }    public String getRemark() {        return remark;    }    public void setRemark(String remark) {        this.remark = remark;    }    @Override    public String toString() {        return "MsgResult{" +                "returnstatus='" + returnstatus + '\'' +                ", code=" + code +                ", remark='" + remark + '\'' +                '}';    }}

    3.调用测试

    public class SendSMSTest {    public static void main(String[] args) throws ParseException {    //使用工具类发送短信,返回封装的对象        MsgResult msgResult = SendSMSUtil.sendMsgPost("平台账号","平台密码","token","短信模板id","接受方手机号","验证码");        //进行判断        if("success".equals(msgResult.getReturnstatus()) && msgResult.getCode()==0){            System.out.println("发送成功");        }else{            System.out.println("发送失败,原因是:"+msgResult.getRemark());        }    }}

    读到这里,这篇“怎么使用Java第三方实现发送短信功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

    --结束END--

    本文标题: 怎么使用Java第三方实现发送短信功能

    本文链接: https://www.lsjlt.com/news/353231.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 怎么使用Java第三方实现发送短信功能
      本文小编为大家详细介绍“怎么使用Java第三方实现发送短信功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java第三方实现发送短信功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、介绍在项目开发...
      99+
      2023-07-05
    • 使用Java第三方实现发送短信功能
      目录一、介绍二、使用步骤1. 平台注册2. 短信签名和短信模板2.1 设置签名文字短信 -> 短信设置 -> 签名管理 -> 添加新的签名2.2 设置模板文字短信 ...
      99+
      2023-03-24
      Java第三方 Java发送短信 第三方发送短信
    • java怎么实现发送短信功能
      在阿里云短信服务中添加签名在阿里云短信服务中添加模板创建属于自己的AccessKey ID和Access Key Secret需要下载两个jar包aliyun-java-sdk-core-3.3.1.jar aliyun-java-sdk-...
      99+
      2019-10-31
      java基础 java 发送 短信 功能
    • 怎么用java+maven实现发送短信验证码功能
      这篇文章主要介绍“怎么用java+maven实现发送短信验证码功能”,在日常操作中,相信很多人在怎么用java+maven实现发送短信验证码功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用java+m...
      99+
      2023-06-02
    • Java怎么实现短信发送
      本篇内容主要讲解“Java怎么实现短信发送”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现短信发送”吧!1. 引入相关maven依赖<dependency><gr...
      99+
      2023-06-22
    • Android使用第三方服务器Bmob实现发送短信验证码
      调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉...
      99+
      2022-06-06
      bmob 发送短信 验证码 短信验证码 Android
    • Java如何实现发送短信验证码功能
      小编给大家分享一下Java如何实现发送短信验证码功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在J...
      99+
      2023-05-30
      java
    • Android第三方消息推送功能怎么实现
      要实现Android第三方消息推送功能,可以使用以下步骤: 注册一个第三方消息推送平台,例如Firebase Cloud Mes...
      99+
      2023-10-25
      Android
    • Java实现发送短信验证码+redis限制发送的次数功能
      java实现短信验证码发送,由于我们使用第三方平台进行验证码的发送,所以首先,我们要在一个平台进行注册。这样的平台有很多,有的平台在新建账号的时候会附带赠几条免费短信。这里我仅做测试...
      99+
      2022-11-13
    • 使用阿里云数据库实现短信发送功能
      本文将介绍如何使用阿里云数据库来实现短信发送功能。阿里云数据库是一个强大而易用的云数据库服务,可以提供稳定、安全的数据存储和访问。我们将使用阿里云数据库的API来实现短信发送功能。 首先,我们需要在阿里云上创建一个数据库实例。在阿里云控制台...
      99+
      2023-11-10
      阿里 短信发送 功能
    • 使用python爬虫怎么实现一个发送短信验证码功能
      本篇文章为大家展示了使用python爬虫怎么实现一个发送短信验证码功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内联代码片。import timedef get_time()...
      99+
      2023-06-06
    • Android使用Intent发送短信的实现方法
      本文实例讲述了Android使用Intent发送短信的实现方法。分享给大家供大家参考,具体如下: 在一个Activity中使用Intent发送短信 package com.z...
      99+
      2022-06-06
      方法 intent Android
    • java怎么实现发送邮件功能
      要在Java中实现发送邮件的功能,可以使用Java Mail API。以下是一个简单的示例代码: import javax.mail...
      99+
      2023-10-26
      java
    • Java中怎么实现SMS短信通发送手机验证码
      本篇文章给大家分享的是有关Java中怎么实现SMS短信通发送手机验证码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。设置短信签名注意不要乱写别的公司等,会被视为诈骗信息设置短信...
      99+
      2023-06-20
    • java怎么实现注册的短信验证码功能
      本篇内容介绍了“java怎么实现注册的短信验证码功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!短信验证码实现流程构造手机验证码,生成一个...
      99+
      2023-06-02
    • 怎么用vbs实现微信自动发送消息功能
      这篇文章主要介绍了怎么用vbs实现微信自动发送消息功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vbs实现微信自动发送消息功能文章都会有所收获,下面我们一起来看看吧。1、微信自动回复消息微信,作为日前...
      99+
      2023-06-30
    • 怎么使用PHP实现一个短信验证码功能
      本篇内容介绍了“怎么使用PHP实现一个短信验证码功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一步:生成短信验证码要生成短信验证码,我...
      99+
      2023-07-05
    • Android使用ContentProvider怎么实现查看系统短信功能
      这篇文章主要介绍“Android使用ContentProvider怎么实现查看系统短信功能”,在日常操作中,相信很多人在Android使用ContentProvider怎么实现查看系统短信功能问题上存在疑惑,小编查阅了各式资料,整理出简单好...
      99+
      2023-06-25
    • Android使用个推实现三方应用的推送功能
      PS:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确. 学习内容: 1.使用个推实现第三方应用的推送. 所有的配置我最后会给一个源代码,内...
      99+
      2022-06-06
      Android
    • 怎么使用Java自带的mail API实现邮件发送功能
      本篇内容主要讲解“怎么使用Java自带的mail API实现邮件发送功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java自带的mail API实现邮件发送功能”...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作