加入收藏 | 设为首页 | 会员中心 | 我要投稿 周口站长网 (https://www.0394zz.cn/)- 数据采集、智能营销、经验、云计算、专属主机!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-07-15 12:26:49 所属栏目:PHP教程 来源:互联网
导读:本文实例为大家分享了php网页生成二维码,Android客户端扫描登录的具体代码,供大家参考,具体内容如下 使用了Github上具有扫码功能的ZXing开源库,使用了通过随机数生成二维码图片网络API,整个过程经过三步: 1.PHP网页生成二维码,相应随机数存储到数据库
  本文实例为大家分享了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
      }
    }
     
  } 

(编辑:周口站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读