Sign.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. class Sign {
  3. private $appId = "";
  4. private $appKey = "";
  5. public function __construct(string $appId,string $appKey) {
  6. $this->appId=$appId;
  7. $this->appKey=$appKey;
  8. }
  9. //创建sign
  10. public function makeSign($data) {
  11. ksort($data);
  12. $string = $this->toUrlParams($data);
  13. $string = $string . "&key=" . $this->appKey;
  14. $string = md5($string);
  15. $result = strtolower($string);
  16. return $result;
  17. }
  18. //检验sign是否正确
  19. public function verifySign($data) {
  20. //check sign
  21. if (!isset($data['sign']) || !$data['sign']) {
  22. return ['code'=>1,'msg'=>'发送的数据签名不存在'];
  23. }
  24. //check sign
  25. if (!isset($data['appid']) || !$data['appid']) {
  26. return ['code'=>1,'msg'=>'发送的应用参数不存在'];
  27. }
  28. if ($data['appid'] != $this->appId) {
  29. return ['code'=>1,'msg'=>'发送的应用参数错误'];
  30. }
  31. //check sign
  32. if (!isset($data['noce']) || !$data['noce']) {
  33. return ['code'=>1,'msg'=>'发送的应用参数不存在'];
  34. }
  35. //check timestamp
  36. if (!isset($data['timestamp']) || !$data['timestamp']) {
  37. return ['code'=>1,'msg'=>'发送的数据参数不合法'];
  38. }
  39. // 验证请求, 10分钟失效
  40. if (time() - $data['timestamp'] > 600) {
  41. return ['code'=>1,'msg'=>'验证超时, 请重新发送请求'];
  42. }
  43. $clientSign = $data['sign'];
  44. unset($data['sign']);
  45. $serverSign = $this->makeSign($data);
  46. if ($clientSign == $serverSign) {
  47. return ['code'=>0,'msg'=>'验证通过'];
  48. } else {
  49. return ['code'=>1,'msg'=>'请求不合法'];
  50. }
  51. }
  52. //生成url字符串
  53. private function toUrlParams($values){
  54. $buff = "";
  55. foreach ($values as $k => $v)
  56. {
  57. //&& $v != ""
  58. if($k != "sign" && !is_array($v)&& $v != ""){
  59. $buff .= $k . "=" .$v . "&";
  60. }
  61. }
  62. $buff = trim($buff, "&");
  63. return $buff;
  64. }
  65. }