Java开发发送短信功能的实战教程(真实项目已在使用)

在实际项目的开发过程中,发送短信可以说是每个网站,app或者应用的必备的功能,其主要体现在注册发送验证码,发送通知等功能。现将我在实际开发中写的发送短信功能做个分享整理…
噢,首先声明一下,在开发短信功能的时候,使用的是 云片 的API、

1.在使用云片之前首先要在云片的官网上注册好签名,定义好模板
  • 1.一起来看看云片注册完以后长啥样子
    在这里插入图片描述
    在这里插入图片描述
    特别说明:注册完成以后在云片的网站上会生成一个APIKEY,发送短信的时候都会用到这个密钥。记得保管好。
  • 2 大体上就是这个样子,当然了,是不支持个人注册的,好像是公司和微信公众号是可以注册的。注册好了账号,充值完成就可以进行开发了,刚注册完成会送5毛钱的短信。接下来一起看看注册好的签名的样式,签名一般就是公司的名称。签名应该是可以申请多个的,我在开发中只申请了一个签名。
    在这里插入图片描述
  • 3.接下来看看事先定义的模板是什么样的
    在这里插入图片描述
    说明:上图就是申请好的模板,在开发功能的时候需要上图圈出的模板id和模板内容中的变量的名称。在模板中是可以定义多个变量的,变量使用双#号包裹起来。
温馨提示:在默认情况下,定义好的一个模板中,所有的变量的内容之和不能超过10个字符。举个例子:上图3108246号模板中 company和initpwd两个变量在开发的时候实际替换的字符个数的和不能超过10个。听到这是不是感觉很坑,随便一个公司名称加重置密码什么的,随便超过了10个字。确实是这样的。超过10个字就不会发送短信出去了,这也是我在开发的时候遇到的问题。莫慌,这个问题也比较好解决,直接打给云片的客服。会将我们定义的模板在变量替换的时候解除变量之和10个字符的限制。
2.以上都是为开发短信功能做的准备工作,好了,开始开发吧…
  • 2.1 首先在pom.xml文件中引入云片的依赖
  <!--云片短信服务依赖-->
        <dependency>
            <groupId>com.yunpian.sdk</groupId>
            <artifactId>yunpian-java-sdk</artifactId>
            <version>1.2.7</version>
        </dependency>
  • 2.2 将云片的相关信息配置到yml中【APIKEY、模板id,模板中定义的变量名】
    在这里插入图片描述
    这是其中一个通知类模板,通过这种方式配置主要考虑到有更好的扩展性,一旦模板的中的的名称变了,就不需要改动代码,只需要改动yml文件即可。
  • 2.3 将你需要的API从云片官网上拷贝下来封装成短信工具类,供多处发送逻辑 调用

/**
 * @description: 短信工具类
 * @date: 2019-05-18 16:12
 */
@Component
public class SmsUtil {
    /**
     * 查账户信息的http地址
     */
    private static final String URI_GET_USER_INFO = "https://sms.yunpian.com/v2/user/get.json";

    /**
     * 模板发送接口的http地址
     */
    private static final String URI_TPL_SEND_SMS = "https://sms.yunpian.com/v2/sms/tpl_single_send.json";

    /**
     * 编码格式。发送编码格式统一用UTF-8
     */
    private static final String ENCODING = "UTF-8";


    /**
     * 取账户信息
     *
     * @param apikey apikey
     * @return json格式字符串
     * @throws IOException        io异常
     * @throws URISyntaxException uri异常
     */
    public String getUserInfo(String apikey) throws IOException, URISyntaxException {
        Map<String, String> params = new HashMap<>();
        params.put("apikey", apikey);
        return post(URI_GET_USER_INFO, params);
    }

    /**
     * 通过模板发送短信(不推荐)
     *
     * @param apikey   apikey
     * @param tplId     模板id
     * @param tplValue  模板变量值
     * @param mobile    接收的手机号
     * @return json格式字符串
     * @throws IOException io异常
     */

    public String tplSendSms(String apikey, String tplId, String tplValue, String mobile) throws IOException {
        Map<String, String> params = new HashMap<>();
        params.put("apikey", apikey);
        params.put("tpl_id", tplId);
        params.put("tpl_value", tplValue);
        params.put("mobile", mobile);
        return post(URI_TPL_SEND_SMS, params);
    }

    /**
     * 基于HttpClient 4.3的通用POST方法
     *
     * @param url       提交的URL
     * @param paramsMap 提交<参数,值>Map
     * @return 提交响应
     */

    public String post(String url, Map<String, String> paramsMap) {
        CloseableHttpClient client = HttpClients.createDefault();
        String responseText = "";
        CloseableHttpResponse response = null;
        try {
            HttpPost method = new HttpPost(url);
            if (paramsMap != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (Map.Entry<String, String> param : paramsMap.entrySet()) {
                    NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue());
                    paramList.add(pair);
                }
                method.setEntity(new UrlEncodedFormEntity(paramList, ENCODING));
            }
            response = client.execute(method);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                responseText = EntityUtils.toString(entity, ENCODING);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return responseText;
    }

}

  • 2.4 在需要发送短信的类中,在成员变量位置从yml读取预先定义的模板的配置
    在这里插入图片描述
    2.5 在需要发送短信的地方通过提前封好的短信工具类进行发送短信
    在这里插入图片描述
    至此,发送短信的相关配置和参数的读取传递,就已经完成了。一般情况下发送短信是比较耗时的过程,所以配合使用消息队列来执行发送短信会更有更好的体验。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值