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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php知道与问问的采集插件代码
Oct 12 PHP
flash用php连接数据库的代码
Apr 21 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
destoon复制新模块的方法
Jun 21 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
php生成word并下载代码实例
Mar 15 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判断是否连接上网络的方法
2015/07/01 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
动态调用css文件——jquery的应用
2007/02/20 Javascript
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
js调出上下文菜单的实例
2015/12/17 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
django实现后台显示媒体文件
2020/04/07 Python
pycharm永久激活超详细教程
2020/10/29 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
金融专业推荐信
2013/11/14 职场文书
校园安全教育广播稿
2014/02/17 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
总经理岗位职责范本
2015/04/01 职场文书
狂人日记读书笔记
2015/06/30 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
MySQL的安装与配置详细教程
2021/06/26 MySQL
docker 制作mysql镜像并自动安装
2022/05/20 Servers
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS