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 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
实用函数2
Nov 08 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
php实现的zip文件内容比较类
Sep 24 PHP
深入理解php printf() 输出格式化的字符串
May 23 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 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 ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
javascript基本语法
2016/05/31 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
Python中处理时间的几种方法小结
2015/04/09 Python
python简单实现旋转图片的方法
2015/05/30 Python
简单解析Django框架中的表单验证
2015/07/17 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
结婚典礼主持词
2015/06/29 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers