php生成Android客户端扫描可登录的二维码


Posted in PHP onMay 13, 2016

本文实例为大家分享了php网页生成二维码,Android客户端扫描登录的具体代码,供大家参考,具体内容如下

使用了Github上具有扫码功能的ZXing开源库,使用了通过随机数生成二维码图片网络API,整个过程经过三步:

1.PHP网页生成二维码,相应随机数存储到数据库中;
2.Android客户端扫码,携带username保存至随机数对应的位置;
3.每隔一段时间,PHP通过Ajax轮询数据库,判断是否为空,不为空则跳转网页。

具体代码:
1. 通过随机数生成二维码图片,并执行轮询操作命令的主页面    

<html>
 <head>
  <title>qrlogin</title>
  <meta charset="UTF-8"/>
 </head>
 <body>
  <?php
  /**
   * @author Cenquanyu
   * @version 2016年5月12日
   *
   */
    require 'mysql_connect.php';
    $randnumber = "";
    for($i=0;$i<8;$i++){
    $randnumber.=rand(0,9);
    }
    //将生成的随机数保存至数据库
    mysql_query("insert into login_data (randnumber) values ('$randnumber')")
    
  ?>
   
  <img src="http://qr.liantu.com/api.php?text=<?php echo $randnumber;?>" width="300px"/>
  <input hidden="hidden" type="text" name="randnumber" id="randnumber"value="<?php echo $randnumber;?>"/>
 
 </body>
 <script>
  xmlHttpRequest.onreadystatechange = function(){
    if(xmlHttpRequest.status == 200 && xmlHttpRequest.readyState ==4){
  result = xmlHttp.responseText;
  if(result==true){//username不为空则跳转页面
     window.location.href='welcome.php';
  }
}
}
 }
 function polling(){
 
   //执行轮询操作
   var xmlHttpRequest;
   if(window.XMLHttpRequest){
     xmlHttpRequest = new XMLHttpRequest();
     }
   else{
     xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
   }
    randnumber = document.getElementById('randnumber').value;
    xmlHttpRequest.open("GET","polling.php?randnumber="+ randnumber,true);
    xmlHttpRequest.send();
 }
    setInterval("polling()",1000);
</script>
 
</html>

2. 数据库连接页面    

<?php
/**
 * 数据库连接文件
 * @author Cenquanyu
 * @version 2016年5月12日
 * 
 */
$con = mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("qr_login");
 
?>

3.执行轮询操作的页面,username不为空则跳转    

<?php
/**
 * @author Cenquanyu
 * @version 2016年5月12日
 * 执行轮询操作,查询随机数在数据库中的相应位置的username字段为不为空
 * 为空,则返回false,页面不跳转
 * 不为空,则说明有用户进行了该二维码的扫码登录,页面进行跳转
 */
require 'mysql_connect.php';
$randnumber = $_GET['randnumber'];
$result = mysql_query("select * from login_data where randnumber='$randnumber'");
$row = mysql_fetch_array($result);
if($row['username']!="")
  echo "true";
else
  echo "false";
?>

4.自定义的API,对客户端的username进行保存    

<?php
/**
 * @author Cenquanyu
 * @version 2016年5月12日
 * 自定义API用于Android客户端扫码登录,将客户端的username保存至二维码对应的随机数在数据库中的相应位置。
 * 参数:username,randnumber
 * 无返回值
 */
$randnumber = $_GET('randnumber');
$username = $_GET('username');
 
require 'mysql_connect.php';
mysql_query("update qr_login set username='$username' where randnumber= '$randnumber'");
 
 
?>

5. Android客户端执行扫码操作的Activity    

package com.Cenquanyu.qrlogin;
 
import com.Cenquanyu.qrlogin.R;
import com.zxing.activity.CaptureActivity;
 
import android.app.Activity;
import android.content.Intent;
import android.graphics.Paint.Cap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
 * @author Cenquanyu
 * @version 2016年5月12日
 * 
 */
public class MainActivity extends Activity implements OnClickListener {
 
  private Button btnScan;
  private EditText etUsername;
 
   
  private static final String WEB_URL = "http://172.31.19.202/QRLogin/";//改成PC端相应地址
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    btnScan = (Button) findViewById(R.id.btnScan);
    btnScan.setOnClickListener(this);
    etUsername = (EditText) findViewById(R.id.etUsername);
  }
 
  @Override
  public void onClick(View v) {
    // 扫码操作
    Intent intent = new Intent(this, CaptureActivity.class);
    startActivityForResult(intent, 0);//返回结果
  }
 
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
      String randnumber = data.getExtras().getString("result");//客户端扫码后返回扫描结果,将二维码对应的随机数取出
      String username = etUsername.getText().toString();
      String url = WEB_URL + "saveUsername.php?randnumber=" + randnumber
          + "&username=" + username;
      HttpUtils.login(url);//访问url
    }
  }
 
}

6. 网络请求类

package com.Cenquanyu.qrlogin;
 
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
public class HttpUtils{
  public static void login(final String url){
    new Thread(new Runnable() {
      @Override
      public void run() {
        HttpURLConnection connection;
        try {
          connection = (HttpURLConnection) new URL(url).openConnection();
          connection.setRequestMethod("GET");
          connection.getInputStream();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }).start();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP面向对象分析设计的经验原则
Sep 20 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
phpize的深入理解
Jun 03 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php短信接口代码
May 13 #PHP
php实现在线通讯录功能(附源码)
May 13 #PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 #PHP
php仿微信红包分配算法的实现方法
May 13 #PHP
PHP简单实现无限级分类的方法
May 13 #PHP
PHP生成可点击刷新的验证码简单示例
May 13 #PHP
关于PHP文件的自动运行方法分析
May 13 #PHP
You might like
PHP number_format() 函数定义和用法
2012/06/01 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
用Python解决计数原理问题的方法
2016/08/04 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python 中如何获取列表的索引
2019/07/02 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
优秀团员个人事迹材料
2014/01/29 职场文书
小学捐书活动总结
2014/07/05 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
公司介绍信范文
2015/01/31 职场文书
正规欠条模板
2015/07/03 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
DIY胆机必读:各国电子管评价
2022/04/06 无线电