如果你有一个用Discuz/UCenter构建的网站,还有自己的Wifi基站或热点,那你可以用Wiwiz为你的Wifi热点做一个入口登录页面。当 wifi终端用户连到你的热点时,打开任何网页都会先显示你的wifi登录页面,也就是web认证页面,然后输入他在你的网站的用户名和密码之后才能通过 认证。并且认证之后,浏览器会跳转到网站首页。
效果如下图:

 

用Discuz/UCenter账号实现Wifi登录认证_第1张图片

Web认证页面

 

用Discuz/UCenter账号实现Wifi登录认证_第2张图片

认证后跳转至网站首页

实现方法如下:
用PHP写web登录页,调用Wiwiz Auth API(需要Wiwiz专业版)。
我的登录页的文件名是myauth.php,将其放置在服务器的discuz根目录上即可。
myauth.php代码如下:

   
   
   
   
  1. /* 
  2. * 用Discuz(UCenter)用户账号实现Wifi Portal认证(Web认证) 
  3. * 调用Wiwiz Auth API 
  4. * 作者:[email protected] 
  5. */ 
  6.  
  7. $userkey = "XXXXXXXXXXXXXXXXXX";    //替换为你的Wiwiz User Key 
  8.   
  9. //**************************************************** 
  10. // Gets incoming parameters 
  11. //**************************************************** 
  12.   
  13. $pTokencode = $_REQUEST["tokencode"];   // incoming parameter "tokencode" 
  14. $pSrvurl = $_REQUEST["srvurl"];     // incoming parameter "srvurl" 
  15.   
  16. session_start(); 
  17. if($pTokencode != null)  
  18.     $_SESSION['tokencode'] = $pTokencode
  19. if($pSrvurl != null) 
  20.     $_SESSION['srvurl'] = $pSrvurl
  21. ?> 
  22.   
  23.  
  24.  
  25. "Content-Type" content="text/html; charset=UTF-8"
  26. "Content-Language" content="zh"
  27. "Pragma" content="no-cache"
  28. "Cache-Control" content="no-cache"
  29.  Discuz无线网络认证  
  30.  
  31.  
  32.   
  33. "post"
  34.  
  35. Discuz无线网络



     
  36.  
  37. 请使用网站账号进行认证
     
  38.       
  39. 用户名: "text" name="username" /> 

  40.  
  41.   
  42. 密码: "password" name="password" /> 

  43.  
  44.   
  45. "submit" name="login" value="登录/认证" /> 

  46.  
  47.  
  48.  
  49. if(isset($_REQUEST['login'])) { // if "Login" button is clicked 
  50.   
  51.     //**************************************************** 
  52.     // Step 1. Do your business. E.g. check user login ...  
  53.     //**************************************************** 
  54.     define('UC_CONNECT''mysql');  // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen() 
  55.                                     // mysql 是直接连接的数据库, 为了效率, 建议采用 mysql 
  56.  
  57.     //数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量) 
  58.     define('UC_DBHOST''localhost');               // UCenter 数据库主机 
  59.     define('UC_DBUSER''root');                    // UCenter 数据库用户名 
  60.     define('UC_DBPW''');                          // UCenter 数据库密码 
  61.     define('UC_DBNAME''discuz');                  // UCenter 数据库名称 
  62.     define('UC_DBCHARSET''UTF-8');                // UCenter 数据库字符集 
  63.     define('UC_DBTABLEPRE''discuz.pre_ucenter_'); // UCenter 数据库表前缀 
  64.  
  65.     //通信相关 
  66.     define('UC_KEY''');               // 与 UCenter 的通信密钥, 要与 UCenter 保持一致 
  67.     define('UC_API''');               // UCenter 的 URL 地址, 在调用头像时依赖此常量 
  68.     define('UC_CHARSET''gbk');        // UCenter 的字符集 
  69.     define('UC_IP''');                // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值 
  70.     define('UC_APPID', 1);              // 当前应用的 ID 
  71.      
  72.     require_once './uc_client/client.php'
  73.  
  74.     if(isset($_POST['login'])) { 
  75.         list($uid$username$password$email) = uc_user_login($_POST['username'], $_POST['password']); 
  76.         if($uid > 0) { 
  77.             $loginSuccess = true; 
  78.         } else { 
  79.             $loginSuccess = false; 
  80.         } 
  81.     }  
  82.   
  83.     if($loginSuccess == false) { 
  84.   
  85.         echo "用户名或密码错误!";   // if user login failed, show an error message 
  86.   
  87.     } else { 
  88.   
  89.         //**************************************************** 
  90.         // Step 2. Do the pre-auth by calling Wiwiz Auth API 
  91.         // IMPORTANT: Do this on your server side(ASP, C#, JSP/Servlet, PHP...),  
  92.         //            but DO NOT do this on your client side (HTML/Javascript) 
  93.         //**************************************************** 
  94.   
  95.         // parameter "action" : REQUIRED! 
  96.         // set it to "1" to authenticate the user 
  97.         // set it to "0" to block the user 
  98.         $action = "1"
  99.   
  100.         // parameter "tokencode": REQUIRED! 
  101.         // set identical to the incoming parameter 
  102.         $tokencode = $_SESSION['tokencode']; 
  103.   
  104.         // parameter "srvurl": REQUIRED! 
  105.         // set identical to the incoming parameter   
  106.         $srvurl = $_SESSION['srvurl']; 
  107.   
  108.         // parameter "endtime" : OPTIONAL 
  109.         // Format: yyyy-mm-dd hh:MM:ss  e.g. 2012-05-31 21:39:00 
  110.         // set this parameter to set the time to close the user's Internet connection  
  111.         // Note: the value must be url-encoded.   
  112.         $endtime = "";  //urlencode('2012-05-31 21:39:00');     //设置wifi使用期限 
  113.   
  114.         // parameter "postauth" : OPTIONAL 
  115.         // E.g. http://www.YourDomain.com 
  116.         // set this parameter to redirect to a specified URL after authenticated. 
  117.         // Note: the value should be url-encoded.   
  118.         $postauth = urlencode("http://192.168.1.250/home");     //wifi认证后跳转至网站首页 
  119.   
  120.         $parameters = "?wiwiz_auth_api=1&ver=1.0"// parameter "wiwiz_auth_api" and "ver". Fixed value 
  121.                 "&tokencode="$tokencode . // parameter "tokencode". See above 
  122.                 "&userkey="$userkey .     // parameter "userkey". Set your own User Key 
  123.                 "&action="$action .       // parameter "action". See above 
  124.                 "&endtime="$endtime .     // parameter "endtime". See above 
  125.                 "&postauth="$postauth;    // parameter "postauth". See above 
  126.   
  127.         $verifycode = file_get_contents($srvurl . $parameters); 
  128.   
  129.         if (strpos ($verifycode"ERR") === 0) { 
  130.             // if there is an error, show error code 
  131.             echo "Error: "$verifycode
  132.   
  133.         } else { 
  134.             // OK, now. do Step 3. 
  135.   
  136.             //**************************************************** 
  137.             // Step 3. Complete the Authentication by calling Wiwiz Auth API 
  138.             //****************************************************   
  139.             $redirectUrl = $srvurl.     // use the value of incoming parameter "srvurl" as the redirection address 
  140.                     "?wiwiz_auth_api_login=1".  // parameter "wiwiz_auth_api_login" 
  141.                     "&tokencode="$tokencode . // parameter "tokencode", set identical to the incoming parameter    
  142.                     "&verifycode="$verifycode;    // parameter "verifycode", set identical to the incoming parameter   
  143.             ob_start(); 
  144.             header("Location: "$redirectUrl); // finally, do the redirection 
  145.             ob_flush(); 
  146.   
  147. //          echo ""; 
  148.   
  149.         } 
  150.   
  151.     } 
  152. ?> 
  153.   
  154.  
  155.   
  156.  
  157.