CheckAuth.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\txx\middleware;
  4. use app\txx\common\Sign;
  5. use think\facade\Db;use think\Response;
  6. use think\facade\Log;
  7. class CheckAuth
  8. {
  9. /**
  10. * 处理请求
  11. *
  12. * @param \think\Request $request
  13. * @param \Closure $next
  14. * @return Response
  15. */
  16. public function handle($request, \Closure $next)
  17. {
  18. $request->isCx=0;
  19. $request->uid=0;
  20. $request->uname='';
  21. $param = $request->post();
  22. $header = $request->header();
  23. Log::write("IPAddr:".$request->server("REMOTE_ADDR"),"info");
  24. Log::write("Action:".$request->server("REQUEST_URI"),"info");
  25. Log::write("param:".json_encode($param),"info");
  26. Log::write("header:".json_encode($header),"info");
  27. if(!isset($param['token'])||$param['token']==''){
  28. Log::write("Action:".$request->server("REQUEST_URI"),"info");
  29. $check =$this->check($header,$param);
  30. if($check['code']==1){
  31. return json_show(104,$check['msg']);
  32. }
  33. }else{
  34. $acct =VerifyTokens($param['token']);
  35. if(!isset($acct['code']) || $acct['code']!=0){
  36. return json_show(102,$acct['message']);
  37. }
  38. $request->uid=isset($acct['data']['user']['id']) ?$acct['data']['user']['id']:"";
  39. $request->uname=isset($acct['data']['user']['nickname']) ?$acct['data']['user']['nickname']:"";
  40. $request->isCx=1;
  41. }
  42. $response = $next($request);
  43. return $response;
  44. }
  45. public function end(Response $response)
  46. {
  47. }
  48. /**数据接口签名验证
  49. * @param $data
  50. * @param $param
  51. * @return array
  52. */
  53. private function check($data,$param){
  54. //check sign
  55. if (!isset($data['appid']) || !$data['appid']) {
  56. return ['code'=>1,'msg'=>'发送的应用参数不存在'];
  57. }
  58. $appinf =Db::name("act_company")->where(["app_id"=>$data['appid'],"is_del"=>0,"status"=>1])->findOrEmpty();
  59. if(empty($appinf)){
  60. return ['code'=>1,'msg'=>'发送的应用参数错误'];
  61. }
  62. $mege=["appid"=>$data['appid'],"noce"=>$data['noce']??'',"sign"=>$data['sign']??'',"timestamp"=>$data['timestamp']??''];
  63. $value =array_merge($mege,$param);
  64. $Sign=new Sign($appinf['app_id'],$appinf['app_key']);
  65. $result =$Sign->verifySign($value);
  66. return $result;
  67. }
  68. }