接口请求数据转发插件用法与介绍
自栓Q验证系统V5.3版本起支持系统插件化按需求安装插件使用了,并且上架了接口请求数据转发这款插件
它能干什么?
1.可以将用户请求的数据转发到你设置好的一个接口地址里进行独立自定义业务逻辑开发二次验证等
2.可以自己自定义开发捕获某一个接口的请求,进行数据处理与验证
3.支持每个接口按每个应用独立设置转发开关与接收转发信息的接口地址
4.支持接管每个接口的响应返回值,让系统响应返回自己设置的接收端返回的数据
它能转发什么数据?(以下为目前该插件1.0版本支持的数据)
1.用户端当前请求的IP地址
2.用户端当前请求的接口地址
3.用户端当前请求的方法
4.用户端当前请求所携带的所有cookie列表
5.用户端当前请求的所有请求头列表
6.用户端当前请求所有传递的参数列表-原本提交的以及系统处理完解密解码的所有参数
7.用户端当前请求的接口的所有完整的响应数据
8.用户端当前请求的接口的所有业务数据-不加密的
9.用户端当前请求的接口的所有信息
接收请求信息转发的数据示例详解(请求的获取应用信息接口)
{
"requestIp":"192.168.0.1",
"requestUrl":"http://yanzheng.giao.cc/api/app/get_app_info?appid=8",
"requestMethod":"GET",
"requestCookie":[
],
"requestHeader":"{"ali-swift-5xx-no-retry":"on","ali-tproxy-httpdns":"on","accept-language":"zh-CN,zh;q=0.9","accept-encoding":"gzip, deflate","accept":"text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3;q=0.9","user-agent":"Mozilla\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/94.0.4606.71 Safari\/537.36 Core\/1.94.191.400 QQBrowser\/11.5.5245.400","upgrade-insecure-requests":"1","cache-control":"max-age=0","proxy-connection":"keep-alive","ali-cdn-real-ip":"218.14.10.177","x-client-scheme":"http","x-forwarded-for":"218.14.10.177","ali-swift-stat-host":"level2.all.giao.cc","ali-swift-log-host":"yanzheng.giao.cc","eagleeye-traceid":"7ce1a79516762979792763616e","via":"cn2466.l1, kunlun10.cn2466, l2cn2302.l2, cache16.l2cn2302","host":"yanzheng.giao.cc","content-type":"","content-length":""}",
"requestParam":{
"original":{
"appid":"8"
},
"processed":{
"appid":"8"
}
},
"responseData":{
"code":1,
"message":"获取成功",
"timestamp":1676297979,
"nonceStr":"9427041a3c1abc8a64a8e87b0ecf5307",
"apiInfo":"{"id":null,"name":null,"controller":null,"method":null,"api":null}",
"data":"{"info":{"name":"无加密算法测试-单码","avatar":"http:\/\/yanzheng.giao.cc\/index\/system\/get_custom_image\/name\/dXBsb2Fkcy9pbWFnZXMvc3lzdGVtX2ltYWdlLzIwMjIwNzAxLzkzZjQxOTVjMmQxZGFhNjM0YjQ4ZmY1NWUzNTEzMDA1LkpQRw==","type":0,"addtime":1664864027,"param_extend_config":{}},"user_verify_mode":0,"user_safe_config":{"token_verify_open":true,"token_unlimited":true,"machine_code_binding_top_limit":"2","online_machine_upper_limit":"2","online_machine_upper_limit_login_scheme":1,"token_invalid_duration":"1","machine_code_verify":true,"online_time_difference":"60","token_update_mechanism":0,"self_service_unbinding":{"open":true,"verify_user_token":false,"interval":0,"frequency_limit_type":0,"frequency_limit_value":0,"deduction_time":0,"verify_original_machine":false}},"moreOtherData":{"api_extra_data":"","request_safe_code":""}}",
"signature":"2b320992b0e2ff631aabcebc540bba8c"
},
"apiBusinessData":{
"info":{
"name":"无加密算法测试-单码",
"avatar":"http://yanzheng.giao.cc/index/system/get_custom_image/name/dXBsb2Fkcy9pbWFnZXMvc3lzdGVtX2ltYWdlLzIwMjIwNzAxLzkzZjQxOTVjMmQxZGFhNjM0YjQ4ZmY1NWUzNTEzMDA1LkpQRw==",
"type":0,
"addtime":1664864027,
"param_extend_config":[
]
},
"user_verify_mode":0,
"user_safe_config":{
"token_verify_open":true,
"token_unlimited":true,
"machine_code_binding_top_limit":"2",
"online_machine_upper_limit":"2",
"online_machine_upper_limit_login_scheme":1,
"token_invalid_duration":"1",
"machine_code_verify":true,
"online_time_difference":"60",
"token_update_mechanism":0,
"self_service_unbinding":{
"open":true,
"verify_user_token":false,
"interval":0,
"frequency_limit_type":0,
"frequency_limit_value":0,
"deduction_time":0,
"verify_original_machine":false
}
},
"moreOtherData":{
"api_extra_data":"",
"request_safe_code":""
}
}
}
字段名 | 类型 | 说明 |
---|---|---|
requestIp | string | 用户端请求ip |
requestUrl | string | 用户端请求的完整url(在tcp、udp协议下这里是空的) |
requestMethod | string | 用户端请求的方法(在tcp、udp协议下这里是空的) |
requestCookie | array | 用户端请求的所有cookie |
requestHeader | json string | 用户端请求的所有请求头 |
requestParam | object | 用户端请求传入的所有参数(包含原本提交的参数与系统处理过解密解码的参数) |
responseData | object | 用户端请求的接口的完整响应返回值数据 |
apiBusinessData | object | 用户端请求的接口的完整业务数据-未加密的 |
接收请求信息转发的数据php案例
<?php
/*
如果需要判断是不是自己设定的机器提交过来的有以下办法:
1.你可以获取请求人的ip进行判断,如果ip不对那就不执行下面的代码
2.你可以用一个密钥来判断放在接收客户端请求信息转发的url参数上面,然后这里接收get参数进行判断,比如 if($_GET['token']!=='你想设置的密钥') exit('token验证失败')
3.更多方案自行摸索
*/
$dataJson=file_get_contents("php://input"); //获取post提交过来的json参数
$data=json_decode($dataJson,true); //解析json为数组
if(is_array($data)){//判断解析后的值是否为数组,如果不是那么传递过来的数据格式不正确
$requestIp=(string)$data['requestIp']; //客户端请求IP
$requestUrl=(string)$data['requestUrl']; //客户端请求地址
$requestMethod=(string)$data['requestMethod']; //客户端请求方法 get、post
$requestCookie=(array)$data['requestCookie']; //客户端请求cookie列表
$requestHeader=(array)json_decode($data['requestHeader'],true); //客户端请求头列表
$requestParamOriginal=(array)$data['requestParam']['original']; //客户端请求传入的参数列表-原本提交的
$requestParamProcessed=(array)$data['requestParam']['processed']; //客户端请求传入的参数列表-系统处理过的(解密解码等)
$responseData=(array)$data['responseData']; //服务器要响应的数据(这里面的data字段是接口业务数据字段,如果开启了返回值加密那么就是被加密的值)
$apiBusinessData=(array)$data['apiBusinessData']; //服务器要响应的接口业务数据(这个没有加密的,如果接口响应业务码非成功那么这里就是空的)
$apiInfo=json_decode($responseData['apiInfo'],true); //客户端请求的接口信息
//例子,判断单码登录接口并且是登录成功的请求转发接收(其他接口也可以这么判断)
if($apiInfo['id']===6 || $apiInfo['api']==='card_app/check'){//判断客户端请求的接口ID是不是为6(单码登录的接口id就是6在后台接口列表可以看见)或者判断接口api是不是card_app/check
if($responseData['code']===1){//判断接口业务响应码是不是为1,因为1是请求业务成功,那既然是单码登录,业务成功自然就是登录成功了
//这里执行登录成功的逻辑代码
$cardId=$apiBusinessData["cardInfo"]["id"];//获取卡密ID
$cardKey=$apiBusinessData["cardInfo"]["card"];//获取本次登录的卡密
$expireTimeStr=$apiBusinessData["expireTimeStr"];//获取卡密到期时间文本
$cardType=$apiBusinessData["cardInfo"]["time_type"];//获取卡密类型
$cardValue=$apiBusinessData["cardInfo"]["time_value"];//获取卡密时长
$cardEndTime=$apiBusinessData["cardInfo"]["endtime"];//获取卡密到期时间-10位时间戳
$cardToken=$apiBusinessData["cardInfo"]["token"];//获取卡密本次登录的token
}
}
}else{
//没有收到数据或数据格式不正确
}
最后修改时间: 2 年前