尊敬的开发人员,您好,请注意开发时要全部采用UTF8编码,最底下有动态语言实现的三个demo示例。 提交后的返回格式为JSON,请转为数组后操作,一共只有两个值大类,一个是v,一个是d,v.success=1表示成功,0表示失败 v={ success=1 表示成功,0表示失败, msg 信息提示, url 链接, wait_time 等待时间,如验证码发送成功后请等待60秒 }, d={ 数据,数组格式 } select 这几个表名不允许读 'lf_log_sys','lf_log_money','lf_managers','lf_manager_level','nas' lf_users 可用select update insert delete,其中update的条件一定要带user radacct 是当前在线记录 acctstoptime='' 表示在线,非空值一小时后会移动到radacct1 radacct1 是历史在线记录,数据量非常大请注意搜索条件 注意取数量的时候,量的大小,会引发计费服务器极大的压力,如果要取全部数据,请先按field单个值先统计再一个一个取,尤其是历史记录表 以下为HTML的演示,真正使用的时候这些name包括API不在client端出现,input里面的这些name和value做为数组的key和value由server端curl提交给计费,计费再返回数据,server端处理好后返回client端 请注意以下的HTML是静态页面会包含 api 是不能直接这样调用的,这只是个示例,请用动态语言 php 或 java python 等实现,实现的时候不能让 api 密钥显示在用户端上,本文最底下有动态语言的实现demo。 查询用户,三个必需项,其余都是可有项 查询单个用户
用户:可有项,name为字段值,value为查询名,比如此处就会生成 where user='101',多个的话后面会按and自动接
操作:必需项
字段:可有项,多个用,分开,不填或没有这个值表示全部字段
表名:必需项
排序:可有项
结果:可有项,不填表示取全部记录值
API :必需项
取出全部用户名,取全部的时候请注意要用field限制一个列名,否则数据量会比较大



必需项
取在线用户数量,取出的结果统在d的数组大小就是



必需项
取所有套餐,path=0的是组套餐,path>0的是子套餐,子套餐的path值是组套餐的id号



必需项
更新用户的密码和过期时间 以下这些字段不可修改,改了也无效 'sd_start', 'sd_stop', 'firstlogintime', 'iffirstlogin', 'admin', 'pool', 'staticmac', 'ifmac', 'portid', 'ifportid', 'servername', 'ifservername', 'nasip', 'ifnasip', 'nasid', 'ifnasid', 'nasporttype', 'alipay_userid', 'alipay_name', 'weixin_openid', 'weixin_name', 'logincount'
用户:必需项,这是where条件,多个的话后面是更新值,比如下面更新密码和过期时间
密码:
过期:
操作:必需项
表名:必需项
必需项
注册用户 以下这些字段不可添加,加了也无效 'sd_start', 'sd_stop', 'firstlogintime', 'iffirstlogin', 'admin', 'pool', 'staticmac', 'ifmac', 'portid', 'ifportid', 'servername', 'ifservername', 'nasip', 'ifnasip', 'nasid', 'ifnasid', 'nasporttype', 'alipay_userid', 'alipay_name', 'weixin_openid', 'weixin_name', 'logincount'
用户:必需项
密码:必需项
注册:必需项
过期:必需项
套餐:必需项
区域:必需项
操作:必需项
表名:必需项
必需项
删除用户
用户:必需项
操作:必需项
表名:必需项
必需项
踢用户离线,user和acctsessionid二选一,只用user踢全部user离线,只用acctsessionid踢单个用户离线
固定项
固定项
固定项
二选一
二选一
必需项
解绑用户field=staticmac,portid,servername,nasip,nasid,weixin,alipay,分别是MAC,VLAN或接口,接入点,对接IP,标识,微信绑定值,支付宝绑定值
固定项
固定项
固定项
必需项
必需项,解绑哪些就填哪些
必需项
示例1: PHP版查询用户,后面的添加,修改,删除用户都可以用这个方式,为确保安全,API 密钥不能出现在客户端的HTML代码里面一定要注意。 $user, //除了上面的user数据可以到 client 取外, //下面的这些是固定值不和 client 端打交道,只和计费之间做传输 "run" => "select", "field" => "", "db" => "lf_users", "order" => "", "limit" => "0,1", "api" => "128长度API", ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://计费IP/lfradius/api.php"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = json_decode(curl_exec($ch), true); curl_close($ch); if ($result['v']['success'] === 1) { print_r($result['d']); } else { die($result['v']['msg']); } 示例2: Python版查询用户,后面的添加,修改,删除用户都可以用这个方式,为确保安全,API 密钥不能出现在客户端的HTML代码里面一定要注意。 #!/usr/bin/python3 import requests import json url = 'http://计费IP/lfradius/api.php' data = { 'user': '101', 'run': 'select', 'field': '', 'db': 'lf_users', 'order': '', 'limit': '0,1', 'api': '128长度API', } requests.packages.urllib3.disable_warnings() response = requests.post(url, data,verify=False) print(json.loads(response.text)) 示例3: JAVA版查询用户,后面的添加,修改,删除用户都可以用这个方式,为确保安全,API 密钥不能出现在客户端的HTML代码里面一定要注意。 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSessionContext; public class javademo { public static void main(String[] args) { HttpUtilTest h = new HttpUtilTest(); String Params = String.format("user=%s&run=%s&field=%s&db=%s&order=%s&limit=%s&api=%s", "101", "select", "", "lf_users", "", "0,1", "128长度API"); String result = h.sendPost("http://计费IP/lfradius/api.php", Params); System.out.println(result); // 打印全部结果,这个结果是JSON字符串,因为Java中并没有内置JSON的解析,因此使用JSON请借助第三方类库。 if (result == null) { System.out.println("取结果失败"); return; } } } class HttpUtilTest { /** * @param url * @param Params * @return * @throws IOException * @作用 使用urlconnection */ public String sendPost(String url, String Params) { OutputStreamWriter out = null; BufferedReader reader = null; String response = ""; try { // 直接通过主机认证 HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return true; } }; // 配置认证管理器 javax.net.ssl.TrustManager[] trustAllCerts = { new TrustAllTrustManager() }; SSLContext sc = SSLContext.getInstance("SSL"); SSLSessionContext sslsc = sc.getServerSessionContext(); sslsc.setSessionTimeout(0); sc.init(null, trustAllCerts, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 激活主机认证 HttpsURLConnection.setDefaultHostnameVerifier(hv); // 以上主要是设置以免https取不到信息 URL httpUrl = new URL(url); // 建立连接 HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("connection", "keep-alive"); // 连接建立超时时间还有读取数据超时时间, conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setUseCaches(false);// 设置不要缓存 conn.setInstanceFollowRedirects(true); conn.setDoOutput(true); conn.setDoInput(true); conn.connect(); // POST请求 out = new OutputStreamWriter(conn.getOutputStream()); out.write(Params); out.flush(); // 读取响应 reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String lines; while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes()); response += lines + "\n"; } reader.close(); // 断开连接 conn.disconnect(); } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); return null; } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return response; } } class TrustAllTrustManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } }