最近客户出了一个难题,希望同时使用手机号码短信验证 和 电子招待券 两种认证方式,而且希望可以让客户二选一,也就是既能用招待券认证,也可以用手机号码认证。这样店内的人和有招待券的客人和只希望用手机号码上网的人都能进行认证。
难的地方在于wiwiz本身虽然支持同时设置这两种认证方式,但如果同时启用,认证的时候就必须同时满足这两个认证条件,而不能二选一。
经过一个朋友的帮助,终于用自己写的认证页面代码解决了这个问题。
原理是,先在Wiwiz后台设置一个默认的电子招待券(我叫它万能招待券),和一个万能手机验证码。
当用户选择电子招待券认证模式时,就用Javascript随便设置一个手机号,手机验证码设为之前设置的万能验证码,并且在页面上隐藏手机号和万能验证码。反过来,如果用户选择手机号码认证模式时,就用Javascript随便设置之前设置的万能招待券并隐藏。

认证页面截屏如下:
 

wiwiz认证页面代码 - 实现招待券与短信验证两种认证方式任选_第1张图片

wiwiz认证页面代码 - 实现招待券与短信验证两种认证方式任选_第2张图片

认证页面代码如下:
(代码中的MAGIC_VOUCHER和MAGIC_MOBILE_CODE就是在Wiwiz后台设置的万能招待券和万能手机验证码)

   
   
   
   
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  4. <meta http-equiv="Content-Language" content="zh"> 
  5. <meta http-equiv="Pragma" content="no-cache"> 
  6. <meta http-equiv="Cache-Control" content="no-cache"> 
  7. <meta name="viewport" content="user-scalable=no, width=device-width" />   
  8. <style type="text/css"> 
  9.  
  10.  
  11. <script src="/as/AuthPageScript.js">script> 
  12. <script> 
  13. /* 自定义部分 */ 
  14. var MAGIC_VOUCHER = "MagicVoucher3C3f3eollpoi0OC";         
  15. var MAGIC_MOBILE = "13011112222"
  16. var MAGIC_MOBILE_CODE = "MagicMobileCode9c3iIl10OA"
  17.  
  18. function $(id) { 
  19.         return document.getElementById(id); 
  20.  
  21. /* 用电子招待券认证 */ 
  22. function onVoucher() { 
  23.         $("spVoucher").style.display = ""
  24.         $("spMobile").style.display = "none"
  25.          
  26.         $("linkVoucher").style.fontWeight = "bold"
  27.         $("linkMobile").style.fontWeight = "normal"
  28.         $("spMarkVoucher").innerHTML = "▶"
  29.         $("spMarkMobile").innerHTML = ""
  30.          
  31.         $("voucher").value = ""
  32.         $("phonenum").value = MAGIC_MOBILE
  33.         $("phonecode").value = MAGIC_MOBILE_CODE
  34.  
  35. /* 用手机号码(短信验证)认证 */ 
  36. function onMobile() { 
  37.         $("spVoucher").style.display = "none"
  38.         $("spMobile").style.display = ""
  39.  
  40.         $("linkVoucher").style.fontWeight = "normal"
  41.         $("linkMobile").style.fontWeight = "bold"
  42.         $("spMarkVoucher").innerHTML = ""
  43.         $("spMarkMobile").innerHTML = "▶";         
  44.  
  45.         $("voucher").value = MAGIC_VOUCHER
  46.         $("phonenum").value = ""
  47.         $("phonecode").value = ""
  48.  
  49. /* 响应回车键 */ 
  50. document.onkeydown = function(e){ 
  51.         if(!e) e = window.event; 
  52.         if((e.keyCode || e.which) == 13){ 
  53.                 $("login").click(); return false;        //触发认证按钮 
  54.         } 
  55.  
  56. /* 以下为需要对接Wiwiz所需的函数 */ 
  57. /* 回调函数。“获取验证码”按钮按下后,将自动调用此函数。可根据code值自行改写该函数。 */ 
  58. function WiwizSmsVerifyMsg(code) { 
  59.         if      (code == "-1") { 
  60.                 alert("手机号码不可为空!"); 
  61.         } else if(code == "0") { 
  62.                 alert("验证码已通过短信发送至您的手机,请注意查收。然后请在认证页面输入验证码。"); 
  63.         } else if(code == "1") { 
  64.                 alert("该热点不允许进行手机号码验证。如有疑问请您联系热点管理员。"); 
  65.         } else if(code == "2") { 
  66.                 alert("该热点不允许进行手机号码验证。如有疑问请您联系热点管理员。"); 
  67.         } else if(code == "3") { 
  68.                 alert("该手机号码不允许进行验证。如有疑问请您联系热点管理员。"); 
  69.         } else if(code == "4") { 
  70.                 alert("手机号码验证过于频繁,请稍后再试。"); 
  71.         } else if(code == "5") { 
  72.                 alert("该手机号码进行验证次数已超过今日上限。"); 
  73.         } else if(code == "6") { 
  74.                 alert("热点认证服务已暂停,不可进行手机验证。"); 
  75.         } else if(code == "7") { 
  76.                 alert("该热点手机验证次数已超过配额。请联系热点管理员。"); 
  77.         } else if(code == "8") { 
  78.                 alert("请求已超时,请刷新认证页面。"); 
  79.         } else if(code == "9") { 
  80.                 alert("请使用上一次通过短信接收到的验证码。"); 
  81.         } else if(code == "99") { 
  82.                 alert("验证短信发送失败。请检查手机号码的有效性,或联系热点管理员。"); 
  83.         } else if(code == "999") { 
  84.                 alert("系统异常,验证短信发送失败。请联系热点管理员。"); 
  85.         } else { 
  86.                 alert("系统异常。请联系热点管理员。"); 
  87.         } 
  88.  
  89. /* 回调函数。“认证”按钮按下后,如报错将自动调用此函数。可根据code值自行改写该函数。 */ 
  90. function WiwizAuthPageError(code) { 
  91.         if       (code == 1) { 
  92.                 alert("您无法使用此网络,除非您认同此协议条款。"); 
  93.         } else if(code == 2) { 
  94.                 alert("请输入用户名。"); 
  95.         } else if(code == 3) { 
  96.                 alert("用户名或密码错误。"); 
  97.         } else if(code == 4) { 
  98.                 alert("电子招待券无效。"); 
  99.         } else if(code == 6) { 
  100.                 alert("超过最大在线用户数。"); 
  101.         } else if(code == 7) { 
  102.                 alert("请输入手机号码。"); 
  103.         } else if(code == 8) { 
  104.                 alert("热点已停用。"); 
  105.         } else if(code == 32) { 
  106.                 alert("账户存在异常,暂时锁定中。"); 
  107.         } else if(code == 35) { 
  108.                 alert("手机验证码错误或已超时。"); 
  109.         } else { 
  110.                 alert("未知错误。错误码:"+ code); 
  111.         } 
  112. script> 
  113. head> 
  114.  
  115. <body topmargin="0" leftmargin="0" onload="onVoucher();"> 
  116.   
  117. <form name="myform" id="myform" action="" method="post" onsubmit="alert(0);">  
  118.  
  119. <table width="100%" cellspacing="1" cellpadding="4" style="font-size:14px" bgcolor="#FFFFFF"> 
  120. <tr align="center"> 
  121.         <td width="100%"> 
  122.                  
  123.                 <img src=/as/s/uploaduserfile/?dl=0&fn=13c3970f650.png /> 
  124.                 <br><br> 
  125.                  
  126.                 <span id="linkVoucher" style="font-weight:bold; font-size:14px"><span id="spMarkVoucher">span><a href="#" onclick="onVoucher();return false;">用电子招待券认证a>span>      
  127.                 <span id="linkMobile" style="font-weight:normal; font-size:14px"><span id="spMarkMobile">span><a href="#" onclick="onMobile();return false;">用手机号码认证a>span> 
  128.                 <br><br>                 
  129.                  
  130.                 <span id="spVoucher" style="display:"> 
  131.                 <br> 
  132.                 <table style="font-size:14px"> 
  133.                 <tr> 
  134.                         <td><b>电子招待券: b>td> 
  135.                         <td> 
  136.                                  
  137.                                 <input name="voucher" id="voucher" type="text" style="width:140px" />                 
  138.                         td> 
  139.                 tr> 
  140.                 <tr> 
  141.                         <td colspan="2" align="center"><font style="font-size:12px;color:#666666">请向店员索取上网用电子招待券font>td> 
  142.                 tr> 
  143.                 table> 
  144.                 span> 
  145.          
  146.                 <span id="spMobile" style="display:none"> 
  147.                 <table style="font-size:14px"> 
  148.                 <tr> 
  149.                         <td><b>手机号码: b>td> 
  150.                         <td> 
  151.                                  
  152.                                 <input name="phonenum" id="phonenum" type="text" value="" style="width:140px" /> 
  153.                         td> 
  154.                 tr> 
  155.                 <tr> 
  156.                         <td>td> 
  157.                         <td> 
  158.                                  
  159.                         <input name="phonecode" id="phonecode" type="text" value="" style="width:140px" /> 
  160.                         td> 
  161.                 tr> 
  162.                 <tr> 
  163.                         <td colspan="2" align="center"><font style="font-size:12px;color:#666666">验证码将通过短信发送至手机font>td> 
  164.                 tr>                 
  165.                 table> 
  166.                 span> 
  167.                 <br> 
  168.                  
  169.                 <input type="button" name="login" id="login" value="   认证   " onclick="WiwizStartAuth();" /> 
  170.                 <br><br> 
  171.         td> 
  172. tr> 
  173. table> 
  174.  
  175. form> 
  176. body>html>