精华内容
下载资源
问答
  • 短信验证码注册

    2016-07-25 11:17:22
    在mob.com上注册一个账号,之后在短信验证码模块申请一个应用,得到app key和app secret。 下载短信验证码SDK。解压后如下 ApiDoc是文档,展开后 双击index.html,即可查看整个文档。 SMSSDK_User_Guide是...

    操作步骤:

    1. 在mob.com上注册一个账号,之后在短信验证码模块申请一个应用,得到app key和app secret。

    2. 下载短信验证码SDK。解压后如下
      SDK解压后
      ApiDoc是文档,展开后
      ApiDoc目录
      双击index.html,即可查看整个文档。
      SMSSDK_User_Guide是指南,告诉你应该怎么做。
      SMSSDK是真正的SDK。
      接下来的具体操作跟随指南。。
      3.代码思路
      共三个页面。
      页面一
      页面一
      页面二
      页面二
      页面三
      页面三
      页面一是自己创建的,页面二和页面三都是SMSSDK里的。
      代码内部逻辑:
      点击页面一(MainActivity)的按钮,生成页面二(在页面一按钮的onclick事件中)。注意,SMSSDK.GUI里只有界面,所以数据的传入传出需要从代码中体现(利用 EventHandler)。页面二,输入了国家和电话号码,点击Next,事件完成,获取数据data,然后传给后台。后台收到,把信息反馈给页面三,同时给该电话号码发验证码短信。填写验证码,按下一步。在mob.com后台验证记录里检查是否验证成功。

    public class MainActivity extends Activity {
    
        Button mBtnBindPhone;
        String APPKEY = "###";
        String APPSECRET = "###";
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            SMSSDK.initSDK(this, APPKEY, APPSECRET);        //初始化SDK,即通过Appkey和Appsecret把该APP和后台绑定
    
            mBtnBindPhone = (Button) findViewById(R.id.btn_bind_phone);
            mBtnBindPhone.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //打开注册页面(页面二)
                    RegisterPage registerPage = new RegisterPage();
                    registerPage.setRegisterCallback(new EventHandler() {
                        @Override
                        public void afterEvent(int event, int result, Object data) {
    // 解析注册结果
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                @SuppressWarnings("unchecked")
                                HashMap<String, Object> phoneMap = (HashMap<String, Object>) data;
                                String country = (String) phoneMap.get("country");
                                String phone = (String) phoneMap.get("phone");
    
    // 提交用户信息
                                submitUserInfo(country, phone);
                            }
                        }
                    });
                    registerPage.show(MainActivity.this);
                }
            });
        }
    
        public void submitUserInfo(String country, String phone) {
            Random r = new Random();
            String uid = Math.abs(r.nextInt()) + "";    //随机生成int类型的随机数,+“”将整数转换为字符串类型
            String nickname = "lalala";
            SMSSDK.submitUserInfo(uid, nickname, null, country, phone);
        }
    }

    总结:看自带的文档和指南非常非常重要。本文代码思路参考了慕课网 Android-短信验证 课程。

    展开全文
  • 主要介绍了vue 实现通过手机发送短信验证码注册功能的相关资料,需要的朋友可以参考下
  • C# - RestSharp实现短信验证码注册登录完整示例:C# - RestSharp.cs和附件说明
  • JavaScript - jQuery实现短信验证码注册登录完整示例:JavaScript - jQuery和附件说明
  • 短信验证码注册登录Shell 的两种方法- Httpie.sh、Shell - wget.sh文件.zip
  • Java是这样通过Unirest实现短信验证码注册登录完整示例:Java - Unirest.java和附件说明,刚碰Java通过Unirest实现短信验证码注册登录示例代码,压缩好了,大家一起来学习啊!
  • NodeJs - Request实现短信验证码注册登录完整示例:NodeJs - Request.js和附件说明
  • NodeJs - Native实现短信验证码注册登录完整示例:NodeJs - Native.js和附件说明
  • NodeJs - Axios实现短信验证码注册登录完整示例:NodeJs - Axios.js和附件说明
  • JavaScript - Fetch实现短信验证码注册登录完整示例:JavaScript - Fetch.js和附件说明
  • PHP - cURL实现短信验证码注册登录完整示例:PHP - cURL.php和附件说明,RAR压缩包
  • 经过前面的基础准备工作后, 就可以正式进入开发的阶段了,...主要以实现手机短信验证码功能案例, 进行演示, 因为这个功能在实际项目中用得最多。 这一节课程, 我们先把手机短信验证码的前台页面实现…

    经过前面的基础准备工作后,

    就可以正式进入开发的阶段了,

    我们的短信接口开发,

    主要以实现手机短信验证码功能案例,

    进行演示,

    因为这个功能在实际项目中用得最多。


    手机验证码前端页面


    这一节课程,

    我们先把手机短信验证码的前台页面实现…

    手机短信验证码注册视频教程在线观看

    http://edu.csdn.net/course/detail/3426/58634

    展开全文
  • Swift - URLSession实现短信验证码注册登录完整示例:Swift - URLSession.swift和附件说明.rar
  • Python - Requests实现短信验证码注册登录完整示例:Python - Requests.py和附件说明.rar
  • Shell - wget实现短信验证码注册登录完整示例:Shell - wget.sh和附件说明.rar
  • Shell - Httpie实现短信验证码注册登录完整示例:Shell - Httpie.sh和附件说明.rar
  • 用户注册 需求分析 注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。...(2)注册逻辑:注册时从redis中提取短信验证码与用户填写的验证码进行比对,如果一 致则可

    用户注册
    需求分析
    注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。
    实现思路
    (1)发送短信验证码逻辑:用户服务将要发送的短信验证码发送给rabbitmq和redis ,
    短信服务将消息从rabbitmq中取出并调用阿里云通信发送短信。阿里云通信整合了三大
    运营商的短信网关,最终把验证码发送到用户的手机上。rabbitmq采用直接模式,用户
    服务为消息生产者,短信服务为消息消费者。

    (2)注册逻辑:注册时从redis中提取短信验证码与用户填写的验证码进行比对,如果一
    致则可以注册,否则拦截请求。

    后端代码
    发送短信验证码到MQ
    实现思路: 在用户服务编写API ,生成手机验证码,存入Redis并发送到RabbitMQ
    1.添加配置文件applicationContext-rabbitmq-producer.xml
    <beans …/>
    <!‐‐连接工厂‐‐>
    <rabbit:connection‐factory id=“connectionFactory” host=“127.0.0.1” port=“5672” username=“guest” password=“guest” />
    <rabbit:admin connection‐factory=“connectionFactory”></rabbit:admin>
    <!‐‐创建队列‐‐>
    <rabbit:queue name=“queue.sms” />
    <rabbit:template id=“rabbitTemplate” connection‐factory=“connectionFactory” />

    2.在UserService中新增方法定义
    /**

    • 发送短信验证码
    • @param mobile
      */
      public void sendSms(String phone);

    3.UserServiceImpl方法实现
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**

    • 发送短信验证码
    • @param phone
      */
      public void sendSms(String phone){
      //1.得到六位短信验证码
      int max=999999;
      int min=100000;
      Random random = new Random();
      int code = random.nextInt(max);
      if(code<min){
      code=code+min;
      }
      System.out.println(“短信验证码:”+code);
      //2.保存到redis里
      redisTemplate.boundValueOps(“code_”+phone).set(code+"");
      redisTemplate.boundValueOps(“code_”+phone).expire(5,TimeUnit.MINUTES);//5分钟失效
      //3.发送给RabbitMQ
      Map<String,String> map=new HashMap();
      map.put(“phone”, phone);
      map.put(“code”, code+"");
      //因为不能发送Map形式的数据,需要转为字符串
      rabbitTemplate.convertAndSend("",“queue.sms”,JSON.toJSONString(map)); //直接模式,使用默认的交换器 RouteKey就是队列的名称
      }

    4.新增UserController
    @RestController
    @RequestMapping("/user")
    public class UserController {
    @Reference
    private UserService userService;
    /**

    • 发送短信验证码
    • @param phone
      */
      @GetMapping(value="/sendSms")
      public Result sendSms(String phone){
      userService.sendSms(phone);
      return new Result();
      }
      }

    短信服务接收消息
    短信发送是由单独的短信服务提供的功能,所有的短信都是先发送到消息队列,短信服务从消息队列中提取手机号和验证码,调用短信发送接口进行发送短信。
    添加监听实现类SmsMessageConsumer
    public class SmsMessageConsumer implements MessageListener {
    public void onMessage(Message message) {
    String jsonString = new String(message.getBody());
    Map<String,String> map = JSON.parseObject(jsonString, Map.class);
    String phone = map.get(“phone”);
    String code=map.get(“code”);
    System.out.println(“手机号:”+phone+“验证码:”+code);
    }
    }

    添加配置文件applicationContext-rabbitmq-consumer.xml
    <!‐‐连接工厂‐‐>
    <rabbit:connection‐factory id=“connectionFactory” host=“127.0.0.1”
    port=“5672” username=“guest” password=“guest” />
    <!‐‐创建队列‐‐>
    <rabbit:queue name=“queue.sms” />
    <!‐‐消费者监听类‐‐>

    <!‐‐设置监听容器‐‐>
    <rabbit:listener‐container connection‐factory=“connectionFactory” >
    <rabbit:listener queue‐names=“queue.sms” ref=“messageConsumer”/>
    </rabbit:listener‐container>

    用户注册 (用户收到验证码后,输入验证码点击注册)
    (1)UserService增加方法定义
    /**

    • 增加
    • @param user
    • @param smsCode
      */
      public void add(User user,String smsCode); //参数为用户信息和短信验证码

    (2)UserServiceImpl实现方法
    /**

    • 增加
    • @param user
    • @param smsCode
      */
      public void add(User user,String smsCode) {
      //比较短信验证码
      //从Redis中获取系统短信验证码(系统生成的)
      String sysCode= (String) redisTemplate.boundValueOps(“code_”+user.getPhone()).get();
      if(sysCode==null){
      throw new RuntimeException(“验证码未发送或已过期”);
      }
      if(!smsCode.equals(sysCode)){
      throw new RuntimeException(“验证码不正确”);
      }
      if(user.getUsername()==null){
      user.setUsername(user.getPhone());
      }
      User searchUser=new User();
      searchUser.setUsername(user.getUsername());
      //应该可以直接根据手机号去搜索数据库中的手机号字段看是否存在该手机号,因为用户可能会在系统中修改用户名,根据用户名去判断就没意义了,除非设置用户名不能修改
      if(userMapper.selectCount(searchUser)>0) { //查询是否存在相同记录 selectCount是根据条件查询满足条件的记录数
      throw new RuntimeException(“该手机号已注册”);
      }
      user.setCreated(new Date());
      user.setUpdated(new Date());
      user.setPoints(0);//积分初始值为0
      user.setStatus(“1”);//状态1
      user.setIsEmailCheck(“0”);//邮箱认证,还未认证
      user.setIsMobileCheck(“1”);//手机认证,已认证
      userMapper.insert(user); //将用户信息存入数据库
      }

    (3)UserController增加方法
    @PostMapping("/save")
    public Result save(@RequestBody User user , String smsCode ){
    //密码加密
    BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
    String newpassword = encoder.encode(user.getPassword());
    user.setPassword(newpassword);
    userService.add(user,smsCode);
    return new Result();
    }

    展开全文
  • TP5 实现短信验证码注册功能 1.首先在 common.php 中封装 curl 函数,用于请求第三方接口 if(!function_exists('curl_request')){ /** * @param string $url 请求地址 * @param bool $post post 请求,默认为 get...

    TP5 实现短信验证码注册功能

    1.首先在 common.php 中封装 curl 函数,用于请求第三方接口

    if(!function_exists('curl_request')){
        /**
         * @param string $url 请求地址
         * @param bool $post post 请求,默认为 get 请求,如果为 true,就表示 post 请求
         * @param array $params 请求参数
         * @param bool $https 是否为 https 请求
        */
        function curl_request($url, $post = true, $params = [], $https = true)
        {
            // 初始化请求
            $ch = curl_init($url);
            if($post) {
                // 如果 $post 为 true,就设置请求方式为 post 请求,默认为 get 请求
                curl_setopt($ch, CURLOPT_POST, true);
                // 并且设置 post 请求的请求参数
                curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            }
            if($https) {
                // 如果 $https 为 true,禁止从服务器验证本地证书
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            }
            // 发送请求,获取返回结果
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $res = curl_exec($ch);
            // 关闭请求
            curl_close($ch);
            // 返回结果
            return $res;
        }
    }
    

    2.还是在 common.php 中封装发送短信验证码的函数,这里调用的是第三方的短信接口

    if(!function_exists('sendmsg')) {
        /**
         * @param string $phone 手机号码
         * @param string $content 短信模板
        */
        function sendmsg($phone, $content)
        {
            // 获取请求地址、appkey
            $gateway = config('msg.gateway');
            $appkey = config('msg.appkey');
            // 拼接请求地址
            $url = $gateway . '?appkey=' . $appkey;
            // 调用封装的 curl_request 函数,发送请求
            $params = [
              'mobile' => $phone,
              'content' => $content
            ];
            // 这里发送的是 post 请求,并且请求地址是 https 的
            $res = curl_request($url, true, $params, true);
            // 判断请求是否发送失败
            if(!$res) {
                return '请求发送失败';
            }
            // 处理结果
            $arr = json_decode($res, true);
            if(isset($arr['code']) && $arr['code'] == 10000) {
                // 短信接口调用成功
                return true;
            } else {
                // 短信接口调用失败
                return '短信发送失败';
            }
        }
    }
    

    补充:上面的第三方请求地址、appkey,我都记录在 config.php 当中

    // 短信配置
    'msg' => [
        'gateway' => 'https://xxxxxx',    // 接口地址
        'appkey' => 'xxxxxxxxxxxxx',      // appkey
    ],
    

    3.其次在控制器中定义发送短信验证码的接口

    public function sendcode()
    {
        // 接收参数
        $params = input();
        // 参数检测
        $validate = $this->validate($params, [
            'phone' => 'require|regex:1[3-9]\d{9}'
        ]);
        if($validate !== true) {
            $res = [
                'code' => 400,
                'msg' => '参数错误'
            ];
            return json($res);
        }
        // 获取上一次发送验证码的时间
        $last_time = cache('register_time_' . $params['phone']);
        // 判断当前发送验证码的时间减去上一次发送验证码的时间,是否小于 60
        if((time() - $last_time) < 60) {
            $res = [
                'code' => 400,
                'msg' => '发送频繁,稍后再试'
            ];
            return json($res);
        }
        // 发送验证码 (生成验证码、生成短信内容、发送短信)
        $code = mt_rand(1000, 9999);
        $content = "【XX】你的验证码是:{$code},3分钟内有效!";
        // $result = sendmsg($params['phone'], $content);   // 为了不减少第三方短信接口的发送次数,这里暂时屏蔽,开发完毕后自行打开
        $result = true; // 直接将 $result 设置为 true,进行短信接口的测试,开发完毕后自行删除
        if($result === true) {
            // 将验证码存储到缓存,用于后续的验证
            cache('register_code_' . $params['phone'], $code, 180);
            // 将当前发送验证码的时间存到缓存,用于防止用户频繁发送验证码
            cache('register_time_' . $params['phone'], time(), 180);
            // 返回成功结果
            $res = [
                'code' => 200,
                'msg' => '短信发送成功',
                'data' => $code		// 开发完毕之后,将其删掉
            ];
            return json($res);
        } else {
            // 返回失败结果
            $res = [
                'code' => 400,
                'msg' => $result
            ];
            return json($res);
        }
    }
    

    4.定义手机号注册接口

    public function phone()
    {
        // 接收参数
        $params = input();
        // 参数检测
        $rule = [
            'phone|手机号码' => 'require|regex:1[3-9]\d{9}|unique:user,phone',
            'code|验证码' => 'require|length:4',
            'password|密码' => 'require|length:6,12|confirm:repassword'
        ];
        $validate = $this->validate($params, $rule);
        if($validate !== true) {
            $this->error($validate);
        }
        // 验证码校验
        $code = cache('register_code_' . $params['phone']);
        if($code != $params['code']) {
            $this->error('验证码错误');
        }
        // 验证码校验成功一次后,将当前缓存中对应手机号的验证码删除
        cache('register_code_' . $params['phone'], null);
        // 密码加密,encrypt_password() 是封装的密码加密函数,这里就不多说了
        $params['password'] = encrypt_password($params['password']);
        // 设置用户名的默认值
        $params['username'] = $params['phone'];
        // 注册用户
        User::create($params, true);
        // 页面跳转
        $this->redirect('home/login/login');
    }
    

    5.最后是前端代码的展示

    <!-- html -->
    <form action="{:url('phone')}" method="post" id="reg_form" class="sui-form form-horizontal">
    	<div class="control-group">
    		<label class="control-label">手机号:</label>
    		<div class="controls">
    			<input type="text" id="phone" name="phone" placeholder="请输入你的手机号" class="input-xfat input-xlarge">
    			<span class="error"></span>
    		</div>
    	</div>
    	<div class="control-group">
    		<label for="code" class="control-label">验证码:</label>
    		<div class="controls">
    			<input type="text" id="code" name="code" placeholder="验证码" class="input-xfat input-xlarge" style="width:120px">
    			<button type="button" class="btn-xlarge" id="dyMobileButton">发送验证码</button>
    			<span class="error"></span>
    		</div>
    	</div>
    	<div class="control-group">
    		<label for="password" class="control-label">登录密码:</label>
    		<div class="controls">
    			<input type="password" id="password" name="password" placeholder="设置登录密码" class="input-xfat input-xlarge">
    			<span class="error"></span>
    		</div>
    	</div>
    	<div class="control-group">
    		<label for="repassword" class="control-label">确认密码:</label>
    		<div class="controls">
    			<input type="password" id="repassword" name="repassword" placeholder="再次确认密码" class="input-xfat input-xlarge">
    			<span class="error"></span>
    		</div>
    	</div>
    	<div class="control-group">
    		<label for="inputPassword" class="control-label">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
    		<div class="controls">
    			<input name="m1" type="checkbox" value="2" checked=""><span>同意协议并注册《XXX用户协议》</span>
    		</div>
    	</div>
    	<div class="control-group">
    		<label class="control-label"></label>
    		<div class="controls btn-reg">
    			<a id="reg_btn" class="sui-btn btn-block btn-xlarge btn-danger reg-btn" href="javascript:;">完成注册</a>
    		</div>
    	</div>
    </form>
    
    // javascript
    $('#dyMobileButton').on('click', function() {
    	// 获取手机号
    	var phone = $('#phone').val()
    	// 定时器
    	var time = 60
    	if(trim(phone) == '') {
    		// 如果手机号码为空
    		$('#phone').next().html('手机号码不能为空')
    		return
    	} else if(!/^1[3-9]\d{9}$/.test(phone)) {
    		// 如果不符合手机号码的格式
    		$('#phone').next().html('手机号码格式不正确')
    		return
    	} else {
    		//清空错误提示
    		$('#phone').next().html('')
    	}
    	// 设置倒计时
    	var timer = setInterval(() => {
    		time--
    		if(time > 0) {
    			// 正在倒计时
    			$(this).html(`${time}秒后,重新发送`)
    			$(this).attr('disabled', true)
    		} else {
    			// 停止倒计时
    			$(this).html('发送验证码')
    			$(this).attr('disabled', false)
    			clearInterval(timer)
    		}
    	}, 1000)
    	// 发送请求
    	$.ajax({
    		url: '{:url("home/login/sendcode")}',
    		type: 'post',
    		data: `phone=${phone}`,
    		dataType: 'json',
    		success: function(res) {
    			console.log(res)
    			alert(res.msg)
    			return
    		}
    	})
    })
    

    程序员小白,如有写得不好地方,还请多多指教、多多见谅!

    展开全文
  • Ruby - NetHTTP实现短信验证码注册登录完整示例:Ruby - NetHTTP.rb和附件说明.rar
  • Objective-C - NSURLSession实现短信验证码注册登录完整示例:Objective-C - NSURLSession.m和附件说明
  • 短信验证码注册登录NodeJs - Axios.js、Native.js、Request.js、Unirest.js文件
  • JavaScript - XHR实现短信验证码注册登录完整示例:JavaScript - XHR.js和附件说明
  • 关于Python实现短信验证码注册登录的Python - http.client.py、Python - Requests.py文件.zip
  • PHP - pecl_http实现短信验证码注册登录完整示例:PHP - pecl_http.php和附件说明
  • 关于java实现短信验证码注册的两种方法:Java - OkHttp.java和Java - Unirest.java文件.zip
  • Python - http.client实现短信验证码注册登录完整示例:Python - http.client.py和附件说明.rar
  • 短信验证码注册登录用php语言可以实现的3种方法PHP - cURL.php、PHP - HTTP_Request2.php、PHP - pecl_http.php文件。
  • PHP - HTTP_Request2实现短信验证码注册登录完整示例:PHP -HTTP_Request2.php和附件说明
  • 短信验证码注册登录就是用户输入手机号后,点击按钮获取验证码。并设置冷却时间,防止用户频繁点击。 后台生成验证码并发送到用户手机上,根据验证码、时间及一串自定义秘钥生成MD5值,并将时间也传回到前端。 用户...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,382
精华内容 6,952
关键字:

短信验证码注册