Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont PHP génère un code QR qui peut être connecté en scannant le client Android

Explication détaillée de la façon dont PHP génère un code QR qui peut être connecté en scannant le client Android

墨辰丷
墨辰丷original
2018-06-02 11:25:011210parcourir

Cet article explique principalement en détail si PHP génère un code QR qui peut être connecté en scannant le client Android. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Utilisé Github The ZXing open. La bibliothèque source avec fonction d'analyse de code utilise l'API réseau pour générer des images de code QR via des nombres aléatoires. L'ensemble du processus passe par trois étapes :

1 La page Web PHP génère le code QR et le code aléatoire correspondant. numéro. Stockez-le dans la base de données ;
2. Le client Android scanne le code et enregistre le nom d'utilisateur à l'emplacement correspondant au nombre aléatoire
3. déterminez si elle est vide ou non. Si elle est vide, la page sera redirigée.

Code spécifique :
1. Générez une image de code QR à travers des nombres aléatoires et exécutez la page principale de la commande d'opération d'interrogation

<html>
 <head>
  <title>qrlogin</title>
  <meta charset="UTF-8"/>
 </head>
 <body>
  <?php
  /**
   * @author Cenquanyu
   * @version 2016年5月12日
   *
   */
    require &#39;mysql_connect.php&#39;;
    $randnumber = "";
    for($i=0;$i<8;$i++){
    $randnumber.=rand(0,9);
    }
    //将生成的随机数保存至数据库
    mysql_query("insert into login_data (randnumber) values (&#39;$randnumber&#39;)")
    
  ?>
   
  <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=&#39;welcome.php&#39;;
  }
}
}
 }
 function polling(){
 
   //执行轮询操作
   var xmlHttpRequest;
   if(window.XMLHttpRequest){
     xmlHttpRequest = new XMLHttpRequest();
     }
   else{
     xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
   }
    randnumber = document.getElementById(&#39;randnumber&#39;).value;
    xmlHttpRequest.open("GET","polling.php?randnumber="+ randnumber,true);
    xmlHttpRequest.send();
 }
    setInterval("polling()",1000);
</script>
 
</html>

2. Page de connexion à la base de données 

<?php
/**
 * 数据库连接文件
 * @author Cenquanyu
 * @version 2016年5月12日
 * 
 */
$con = mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("qr_login");
 
?>

3. La page qui effectue l'opération d'interrogation sautera si le nom d'utilisateur n'est pas vide

<?php
/**
 * @author Cenquanyu
 * @version 2016年5月12日
 * 执行轮询操作,查询随机数在数据库中的相应位置的username字段为不为空
 * 为空,则返回false,页面不跳转
 * 不为空,则说明有用户进行了该二维码的扫码登录,页面进行跳转
 */
require &#39;mysql_connect.php&#39;;
$randnumber = $_GET[&#39;randnumber&#39;];
$result = mysql_query("select * from login_data where randnumber=&#39;$randnumber&#39;");
$row = mysql_fetch_array($result);
if($row[&#39;username&#39;]!="")
  echo "true";
else
  echo "false";
?>

. 4. API personnalisée pour enregistrer le nom d'utilisateur du client

<?php
/**
 * @author Cenquanyu
 * @version 2016年5月12日
 * 自定义API用于Android客户端扫码登录,将客户端的username保存至二维码对应的随机数在数据库中的相应位置。
 * 参数:username,randnumber
 * 无返回值
 */
$randnumber = $_GET(&#39;randnumber&#39;);
$username = $_GET(&#39;username&#39;);
 
require &#39;mysql_connect.php&#39;;
mysql_query("update qr_login set username=&#39;$username&#39; where randnumber= &#39;$randnumber&#39;");
 
 
?>

5. Le client Android effectue une analyse de code. 🎜>

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. Classe de requête réseau

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

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

php+implémentation ajax de la fonction de téléchargement d'image avec exemple détaillé de barre de progression

PHP se connecte à la base de données MySQL et la génère au format json

Méthode PHP pour implémenter le tri d'une certaine clé dans un tableau à deux dimensions

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn