php生成Android客戶端掃描可登錄的二維碼
來源:易賢網(wǎng) 閱讀:1125 次 日期:2016-08-23 15:05:58
溫馨提示:易賢網(wǎng)小編為您整理了“php生成Android客戶端掃描可登錄的二維碼”,方便廣大網(wǎng)友查閱!

本文實(shí)例為大家分享了php網(wǎng)頁生成二維碼,Android客戶端掃描登錄的具體代碼,供大家參考,具體內(nèi)容如下

使用了Github上具有掃碼功能的ZXing開源庫,使用了通過隨機(jī)數(shù)生成二維碼圖片網(wǎng)絡(luò)API,整個(gè)過程經(jīng)過三步:

1.PHP網(wǎng)頁生成二維碼,相應(yīng)隨機(jī)數(shù)存儲(chǔ)到數(shù)據(jù)庫中;

2.Android客戶端掃碼,攜帶username保存至隨機(jī)數(shù)對(duì)應(yīng)的位置;

3.每隔一段時(shí)間,PHP通過Ajax輪詢數(shù)據(jù)庫,判斷是否為空,不為空則跳轉(zhuǎn)網(wǎng)頁。

具體代碼:

1. 通過隨機(jī)數(shù)生成二維碼圖片,并執(zhí)行輪詢操作命令的主頁面

<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);

    }

    //將生成的隨機(jī)數(shù)保存至數(shù)據(jù)庫

    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不為空則跳轉(zhuǎn)頁面

     window.location.href='welcome.php';

  }

}

}

 }

 function polling(){

   //執(zhí)行輪詢操作

   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. 數(shù)據(jù)庫連接頁面     

<?php

/**

 * 數(shù)據(jù)庫連接文件

 * @author Cenquanyu

 * @version 2016年5月12日

 * 

 */

$con = mysql_connect("localhost","root","") or die(mysql_error());

mysql_select_db("qr_login");

?>

3.執(zhí)行輪詢操作的頁面,username不為空則跳轉(zhuǎn)     

<?php

/**

 * @author Cenquanyu

 * @version 2016年5月12日

 * 執(zhí)行輪詢操作,查詢隨機(jī)數(shù)在數(shù)據(jù)庫中的相應(yīng)位置的username字段為不為空

 * 為空,則返回false,頁面不跳轉(zhuǎn)

 * 不為空,則說明有用戶進(jìn)行了該二維碼的掃碼登錄,頁面進(jìn)行跳轉(zhuǎn)

 */

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,對(duì)客戶端的username進(jìn)行保存     

<?php

/**

 * @author Cenquanyu

 * @version 2016年5月12日

 * 自定義API用于Android客戶端掃碼登錄,將客戶端的username保存至二維碼對(duì)應(yīng)的隨機(jī)數(shù)在數(shù)據(jù)庫中的相應(yīng)位置。

 * 參數(shù):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客戶端執(zhí)行掃碼操作的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端相應(yīng)地址

  @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);//返回結(jié)果

  }

  @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");//客戶端掃碼后返回掃描結(jié)果,將二維碼對(duì)應(yīng)的隨機(jī)數(shù)取出

      String username = etUsername.getText().toString();

      String url = WEB_URL + "saveUsername.php?randnumber=" + randnumber

          + "&username=" + username;

      HttpUtils.login(url);//訪問url

    }

  }

}

6. 網(wǎng)絡(luò)請(qǐng)求類

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();

  }

}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:php生成Android客戶端掃描可登錄的二維碼
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)