WxSign.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Libs\Classes;
  3. /**
  4. * 签名
  5. */
  6. class WxSign{
  7. public $secret_key = env("SECRET_KEY");
  8. public function arr_to_url($array,$has_sign=false){
  9. ksort($array);
  10. reset($array);
  11. $arg = "";
  12. while (list ($name, $val) = each ($array)) {
  13. if($name == 'sign' && !$has_sign) continue;
  14. if(strpos($name, "_") === 0)
  15. continue;
  16. if(is_array($val))
  17. $val =join(',',$val);
  18. if($val==="")
  19. continue;
  20. $arg.=$name."=". $val ."&";
  21. }
  22. $arg = substr($arg,0,strlen($arg)-1);
  23. return $arg;
  24. }
  25. /**
  26. * 普通对称校验签名
  27. */
  28. function get_sign($params) {
  29. $url = $this->arr_to_url($params,false);
  30. $url = $url.'&key='.$this->secret_key;
  31. v('get_zw_notify_sign_url:'.$url);
  32. $sign = md5($url);
  33. return $sign;
  34. }
  35. /**
  36. * 得到签名数组
  37. * return 追加timestamp,sign
  38. *
  39. */
  40. public function get_sign_arr($data,$secret_key){
  41. if(!empty($secret_key)) $this->secret_key = $secret_key;
  42. $data['timestamp'] = time();
  43. $sign = $this->get_sign($data);
  44. $data['sign'] = $sign;
  45. return $data;
  46. }
  47. }
  48. ?>