gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章php生成Android客户端扫描可登录的二维码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
< 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. 数据库连接页面     。

?
1
2
3
4
5
6
7
8
9
10
11
<?php
/**
  * 数据库连接文件
  * @author Cenquanyu
  * @version 2016年5月12日
  *
  */
$con = mysql_connect( "localhost" , "root" , "" ) or die (mysql_error());
mysql_select_db( "qr_login" );
 
?>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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进行保存     。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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     。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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. 网络请求类 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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生成Android客户端扫描可登录的二维码的文章就讲到这里了,如果你想了解更多关于php生成Android客户端扫描可登录的二维码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com