SignCheck.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\DataApiNew\Models\AgentApi;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use Vinkla\Hashids\Facades\Hashids;
  7. class SignCheck
  8. {
  9. /**
  10. * Handle an incoming request.
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
  14. * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
  15. */
  16. public function handle(Request $request, Closure $next)
  17. {
  18. list($status,$message) = $this->validSign($request);
  19. if (!$status) {
  20. return response()->json(['code' => 0, 'msg' => $message], 400);
  21. }
  22. return $next($request);
  23. }
  24. //校验签名
  25. function validSign($request)
  26. {
  27. try{
  28. $postData = $request->all();
  29. $signature = $request->header('X-Signature'); // 获取请求头中的签名
  30. if (empty($signature)) {
  31. return [false,'签名错误'];
  32. }
  33. $user_key = Hashids::decode($request->input('user_key', null));
  34. if (empty($user_key)) {
  35. return [false,'用户信息异常'];
  36. }
  37. $user_id = $user_key[0];
  38. $signature = base64_decode($signature);
  39. ksort($postData);
  40. unset($postData['idcard_front']);
  41. unset($postData['idcard_back']);
  42. unset($postData['user_with_idcard']);
  43. $data = http_build_query($postData); // 用 & 和 = 拼接为字符串 ,中文字符要urlencode
  44. $pu_key = AgentApi::where('user_id', $user_id)->value('public_key');
  45. if (empty($pu_key)) {
  46. return [false,'秘钥信息异常'];
  47. }
  48. $pu_keys = "-----BEGIN PUBLIC KEY-----\n$pu_key\n-----END PUBLIC KEY-----";
  49. if(!openssl_verify($data, $signature, $pu_keys, OPENSSL_ALGO_SHA256)){
  50. return [false,'签名错误'];
  51. }
  52. return [true,'验证成功'];
  53. }catch (\Exception $e){
  54. return [false,'验证失败'];
  55. }
  56. }
  57. }