RedApiSign.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Support\Facades\Log;
  5. use Illuminate\Support\Facades\Redis;
  6. class RedApiSign
  7. {
  8. /**
  9. * 验证签名 API接口
  10. * @param \Illuminate\Http\Request $request
  11. * @param Closure $next
  12. */
  13. public function handle($request, Closure $next)
  14. {
  15. $params = $request->all();
  16. $sign = $params['sign'] ?? '';
  17. unset($params['sign']);
  18. $apiSign = self::newSign($params);
  19. if (!empty($params) && $sign != $apiSign) {
  20. // 生成用户请求信息日志
  21. if (is_array($params)) {
  22. $params['sign'] =$sign;
  23. $request_extra = \GuzzleHttp\json_encode($params);
  24. } else {
  25. $request_extra = '';
  26. }
  27. Log::info('new 服务端-客户端-所有请求信息 ' . $request_extra);
  28. Log::info('new 服务端签名信息-签名失败:' . $apiSign);
  29. return apiReturnFail('Payment error_1');
  30. }
  31. return $next($request);
  32. }
  33. static $serectKey = 'd03cb639cbf2192dcd066277749f8412';
  34. public static function newSign($data)
  35. {
  36. foreach ($data as $key => &$value) {
  37. if ($key == 'userName' || $key == 'userEmail' || $key == 'userPhone' || $key == 'rand_str') {
  38. unset($data[$key]);
  39. }
  40. if (empty($value) && $value !== '0') {
  41. unset($data[$key]);
  42. }
  43. }
  44. unset($value);
  45. if (!is_array($data)) {
  46. return false;
  47. }
  48. ksort($data);
  49. $sign_str = '';
  50. foreach ($data as $k => $v) {
  51. $sign_str .= $k . '=' . $v . '&';
  52. }
  53. $sign_str .= 'key=' . self::$serectKey;
  54. $sign = md5($sign_str);
  55. return $sign;
  56. }
  57. }