ylb-接口7注册发送短信

这篇具有很好参考价值的文章主要介绍了ylb-接口7注册发送短信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总览:
ylb-接口7注册发送短信,ylb,java

1、配置处理

1.1 依赖引入

在common模块下引入短信验证码的依赖项(生成4位随机数):
ylb-接口7注册发送短信,ylb,java

1.2 application.yml

在web模块下的resources/application.yml,添加配置信息(京东万象):

#短信配置
jdwx:
  sms:
    url: https://way.jd.com/chuangxin/dxjk
    appkey: 3680fa919b771148da626bbcbd459475
    content: 【大富科技】你的验证码是:%s,3分钟内有效,请勿泄露给他人
    login-text: 【大富科技】登录验证码是:%s,3分钟内有效,请勿泄露给他人
  realname:
    url: https://way.jd.com/youhuoBeijing/test
    appkey: 3680fa919b771148da626bbcbd459475

1.3 短信配置类JdwxSmsConfig

在web模块下的config包,创建一个短信配置类(JdwxSmsConfig):

package com.bjpowernode.front.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "jdwx.sms")
public class JdwxSmsConfig {
    private String url;
    private String appkey;
    private String content;
    private String loginText;

    public String getLoginText() {
        return loginText;
    }

    public void setLoginText(String loginText) {
        this.loginText = loginText;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getAppkey() {
        return appkey;
    }

    public void setAppkey(String appkey) {
        this.appkey = appkey;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

2、service处理

在web模块下的service包,创建一个短信接口(SmsService):

package com.bjpowernode.front.service;

public interface SmsService {


    /**
     * @param phone 手机号
     * @return true:发送成功,false 其他情况
     */
    boolean sendSms(String phone);
}

3、serviceImpl处理

在web模块下的service包,实现这个接口(SmsCodeRegisterImpl):注册发送短信验证码
步骤:
1、随机生成4位短信验证码
2、使用http接受用户响应的json数据(包括电话、页面状态数等)
3、使用fastjson解析json数据,验证一下json数据(电话是否满足格式要求、页面状态是否正常等)
4、把验证码暂时存储到redis中(注入redis模板,在common模块中的RedisKey中写入相应的KEY)

package com.bjpowernode.front.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.bjpowernode.common.constants.RedisKey;
import com.bjpowernode.front.config.JdwxSmsConfig;
import com.bjpowernode.front.service.SmsService;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

/**
 * 注册发送短信验证码
 */

@Service(value = "smsCodeRegisterImpl")
public class SmsCodeRegisterImpl implements SmsService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource
    private JdwxSmsConfig smsConfig;

    @Override
    public boolean sendSms(String phone) {
        boolean send = false;
        // 设置短信内容
        String random  = RandomStringUtils.randomNumeric(4);
        System.out.println("注册验证码的随机数 random="+random);
        //更新content中的  %s   【大富科技】你的验证码是:%s,3分钟内有效,请勿泄露给他人
        String content  = String.format(smsConfig.getContent(), random);

        //使用HttpClient发送 get 请求给第三方。
        CloseableHttpClient client = HttpClients.createDefault();
        //https://way.jd.com/chuangxin/dxjk?mobile=13568813957&content=
        //【创信】你的验证码是:5873,3分钟内有效!&appkey=您申请的APPKEY
        String url = smsConfig.getUrl()+"?mobile="+phone
                        +"&content=" + content
                        +"&appkey="+smsConfig.getAppkey();
        HttpGet get  = new HttpGet(url);

        try{
            CloseableHttpResponse response = client.execute(get);
            if( response.getStatusLine().getStatusCode() == HttpStatus.SC_OK ){  // 状态码:200
                
                //得到返回的数据,json
                //String text = EntityUtils.toString(response.getEntity());
                String text="{\n" +
                        "    \"code\": \"10000\",\n" +
                        "    \"charge\": false,\n" +
                        "    \"remain\": 1305,\n" +
                        "    \"msg\": \"查询成功\",\n" +
                        "    \"result\": {\n" +
                        "        \"ReturnStatus\": \"Success\",\n" +
                        "        \"Message\": \"ok\",\n" +
                        "        \"RemainPoint\": 420842,\n" +
                        "        \"TaskID\": 18424321,\n" +
                        "        \"SuccessCounts\": 1\n" +
                        "    }\n" +
                        "}";
               
                //解析json
                if(StringUtils.isNotBlank(text)){  // 
                    // fastjson
                    JSONObject jsonObject = JSONObject.parseObject(text);
                    if("10000".equals(jsonObject.getString("code"))){ //第三方接口调用成功
                        //读取result中的key:ReturnStatus
                        if("Success".equalsIgnoreCase(
                                jsonObject.getJSONObject("result").getString("ReturnStatus"))){
                            //短信发送成功
                            send  = true;

                            //把短信验证码,存到redis
                            String key = RedisKey.KEY_SMS_CODE_REG + phone;
                            stringRedisTemplate.boundValueOps(key).set(random,3 , TimeUnit.MINUTES);

                        }
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return send;
    }
}

其中:
1、上面用到httpclient类,在common模块下引入依赖:
ylb-接口7注册发送短信,ylb,java
2、上面用到fastjson解析json,在common模块下引入依赖:
ylb-接口7注册发送短信,ylb,java
3、验证码存入redis时更新添加相应的RedisKey(在common模块constants包下的RedisKey类):

    /*注册时,短信验证码 SMS:REG:手机号*/
    public static final String KEY_SMS_CODE_REG = "SMS:REG:";

4、controller处理

在web模块下controller包,创建一个对应的controller类(SmsController),添加方法(sendCodeRegister(@RequestParam String phone)):文章来源地址https://www.toymoban.com/news/detail-566950.html

package com.bjpowernode.front.controller;

import com.bjpowernode.common.constants.RedisKey;
import com.bjpowernode.common.enums.RCode;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.front.service.SmsService;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@Api(tags = "短信业务")
@RestController
@RequestMapping("/v1/sms")
public class SmsController extends BaseController {

    @Resource(name = "smsCodeRegisterImpl")
    private SmsService smsService;

    @Resource(name = "smsCodeLoginImpl")
    private SmsService loginSmsService;

    /**发送注册验证码短信*/
    @GetMapping("/code/register")
    public RespResult sendCodeRegister(@RequestParam String phone){
        RespResult result = RespResult.fail();
        if(CommonUtil.checkPhone(phone)){
            //判断redis中是否有这个手机号的验证码
            String key  = RedisKey.KEY_SMS_CODE_REG + phone;
            if(stringRedisTemplate.hasKey(key)){  // 判断验证码key是否出现过在redis中,就是在3分钟之内发送过一次,这个验证码还可以使用
                result = RespResult.ok();
                result.setRCode(RCode.SMS_CODE_CAN_USE);
            } else {
                boolean isSuccess = smsService.sendSms(phone);
                if( isSuccess ){
                    result = RespResult.ok();
                }
            }
        } else {
            result.setRCode(RCode.PHONE_FORMAT_ERR);
        }
        return result;
    }

    /**发送登录验证码短信*/
    @GetMapping("/code/login")
    public RespResult sendCodeLogin(@RequestParam String phone){
        RespResult result = RespResult.fail();
        if(CommonUtil.checkPhone(phone)){
            //判断redis中是否有这个手机号的验证码
            String key  = RedisKey.KEY_SMS_CODE_LOGIN + phone;
            if(stringRedisTemplate.hasKey(key)){
                result = RespResult.ok();
                result.setRCode(RCode.SMS_CODE_CAN_USE);
            } else {
                boolean isSuccess = loginSmsService.sendSms(phone);
                if( isSuccess ){
                    result = RespResult.ok();
                }
            }
        } else {
            result.setRCode(RCode.PHONE_FORMAT_ERR);
        }
        return result;
    }
}

到了这里,关于ylb-接口7注册发送短信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java阿里云短信发送工具类

    阿里云短信发送:调用SendSms发送短信_短信服务-阿里云帮助中心  工具类:

    2024年02月12日
    浏览(44)
  • (短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码

    阿里云官网: https://www.aliyun.com/ 点击官网首页注册按钮。 注册成功后,点击登录按钮进行登录。登录后进入短信服务管理页面,选择国内消息菜单: 短信签名是短信发送者的署名,表示发送方的身份。 切换到【模板管理】标签页: 短信模板包含短信发送内容、场景、变量信息

    2024年02月02日
    浏览(56)
  • ylb-接口5产品详情

    总览: 在api模块下service包,ProductService接口添加新方法(根据产品id ,查询产品信息queryById(Integer id)): 在dataservice模块service包,实现ProductService接口,ProductServiceImpl添加实现方法(queryById(Integer id)): 在api模块下pojo包,创建一个产品金额信息BidInfoProduct类: 在api模块下

    2024年02月16日
    浏览(38)
  • ylb-接口11实名认证

    总览: 在web模块config包下,创建实名认证的一个配置类JdwxRealnameConfig: 在web模块下的resources/application.yml,添加配置信息(京东万象):(在realname) 在web模块下的vo包,创建RealnameVO类: 调用第三方接口,在web模块service包下创建RealnameServiceImpl类(不写接口,是因为只有一个

    2024年02月16日
    浏览(45)
  • 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

    前置:需要腾讯云的账号,后期授权需要,不需要买云服务器,有需要的可以购买短信套餐(几块钱) 搜索框输入短信,可以买一个短信套餐包,便宜不贵,进入短信服务的控制台 发送短信有频率限制,企业用户可以修改设置 之后我们需要对短信内容进行设置      类型有网站

    2024年02月09日
    浏览(48)
  • Java+Demo对接中国移动 云MAS短信发送(http协议详解,新测成功!)

    一.登录官网,下载http接入文档(随着官网不断更新,可参考官网的文档) 官网地址为:云mas业务平台  进入云MAS管理平台,找到 管理-接口管理 的列表页。 (必读:本文对接方式是 java引用jar包,进行sdk协议对接,后台java代码是引用jar包,调用短信服务的http接口,所以你创

    2024年02月09日
    浏览(47)
  • 微信小程序实现发送短信的功能(发送短信)

    我使用的是微信小程序的云开发这种方式来实现的,纯前端操作,无需后端接入。 1,打开微信公众平台中的【云开发】  2,在概览里面点击开通静态网站  3,点击开通  4,确定开通,这地方看上去是要收费的,但是第一个月是有免费的额度给你使用的,后期收不收费要通

    2024年02月09日
    浏览(56)
  • 最近项目上需要发送短信整理了一篇文章 SpringBoot整合阿里云发送短信

    阿里云短信服务网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 第一步:申请签名(一般申请时长在1-2小时之间)特别注意:场景说明不要乱填以免申请不通过  第二步:申请短信模板(一般申请时长在1-2小时之间)特别注意:场景说明不要乱填以免申请不

    2024年02月06日
    浏览(49)
  • 短信发送系统后台搭建,源码基础版短信系统

    短信版本基础版本记录 因是基础版本,客户端功能和后台功能尽量简洁,方便实用。 一:后台和客户端的呈现方式 1.1后台采用软件版本,后台不通过URL地址打开。通过安装在使用的电脑上进行连接短信服务器进行操作。 1.2:客户端采用通过URL的方式打开方便使用 WEB短信客

    2024年02月07日
    浏览(36)
  • 2023 node 接入腾讯云短信服务,实现发送短信功能

    1、在 腾讯云开通短信服务,并申请 签名 和 正文模板 腾讯云短信 https://console.cloud.tencent.com/smsv2 a、签名即是短信的开头。例如 【腾讯云短信】xxxxxxx; b、正文模板即短信内容, 变量部分使用 {1} , 数字从1开始累推。例如: 今天是{1}佳节,{2}祝您节日快乐! 1 和 2 即可以我

    2024年02月10日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包