PartySign.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Http\Appadapter;
  3. class PartySign
  4. {
  5. private $secret = '';
  6. public function __construct($secret)
  7. {
  8. $this->secret =$secret;
  9. }
  10. /**
  11. * 发送POST请求
  12. *
  13. * @param unknown $url
  14. * @param unknown $data
  15. * @return boolean
  16. */
  17. public function api_notice_increment($url, $data)
  18. {
  19. $ch = curl_init();
  20. $header = "Accept-Charset: utf-8";
  21. curl_setopt($ch, CURLOPT_URL, $url);
  22. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6);
  23. curl_setopt($ch, CURLOPT_TIMEOUT, 6);
  24. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  25. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  26. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  27. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  28. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  29. curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  30. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  32. $tmpInfo = curl_exec($ch);
  33. if (curl_errno($ch)) {
  34. return false;
  35. } else {
  36. return $tmpInfo;
  37. }
  38. }
  39. /**
  40. * 将数组$data进行签名
  41. *
  42. * 签名方式:md5
  43. *
  44. * @param array $data
  45. * @return String 签名结果
  46. */
  47. public function signString($data) {
  48. $data = is_array($data) ? $data : json_decode($data, true);
  49. $data = $this->arraytolower($data);
  50. ksort($data); //根据键值对数组升序排序
  51. $content = '';
  52. foreach ($data as $k=>$val) {
  53. $content .= $k .'='. $val;
  54. }
  55. $content .= $this->secret;
  56. $token = md5($content);
  57. return $token;
  58. }
  59. /**
  60. * 验证签名
  61. * @param array $data
  62. * @return boolean
  63. */
  64. public function checkSignature($data)
  65. {
  66. if(isset($data['token'])) {
  67. $token = $data['token'];
  68. } else {
  69. return false;
  70. }
  71. unset($data['token']);
  72. $data = $this->arraytolower($data);
  73. ksort($data); //根据键值对数组升序排序
  74. $content = '';
  75. foreach ($data as $k=>$val) {
  76. $content .= $k .'='. $val;
  77. }
  78. $content .= $this->secret;
  79. $mySignature = md5($content);
  80. if($mySignature == $token) {
  81. return true;
  82. } else {
  83. return false;
  84. }
  85. }
  86. /**
  87. * 将数组$array的key全部转换为小写
  88. */
  89. public function arraytolower($array) {
  90. $new = array();
  91. foreach ($array as $key=>$val) {
  92. $new[strtolower($key)] = $val;
  93. }
  94. return $new;
  95. }
  96. }