SHA1.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * SHA1 class
  4. *
  5. * 计算公众平台的消息签名接口.
  6. *
  7. * @author gaoming13 <gaoming13@yeah.net>
  8. * @link https://github.com/gaoming13/wechat-php-sdk
  9. * @link http://me.diary8.com/
  10. */
  11. namespace echowx\utils;
  12. class SHA1
  13. {
  14. /**
  15. * 用SHA1算法生成安全签名
  16. * 生成微信消息体的签名
  17. *
  18. * @param string $token 票据
  19. * @param string $timestamp 时间戳
  20. * @param string $nonce 随机字符串
  21. * @param string $encrypt_msg 密文消息
  22. * @return bool|string
  23. */
  24. static function getSHA1($token, $timestamp, $nonce, $encrypt_msg)
  25. {
  26. //排序
  27. try {
  28. $array = array($encrypt_msg, $token, $timestamp, $nonce);
  29. sort($array, SORT_STRING);
  30. $str = implode($array);
  31. return sha1($str);
  32. } catch (\Exception $e) {
  33. @error_log('getSHA1 Error: ' . $e->getMessage(), 0);
  34. return FALSE;
  35. }
  36. }
  37. /**
  38. * 获取微信消息的签名
  39. * @param string $token 票据
  40. * @param string $timestamp 时间戳
  41. * @param string $nonce 随机字符串
  42. * @return bool|string
  43. */
  44. static function getSignature($token, $timestamp, $nonce)
  45. {
  46. //排序
  47. try {
  48. $array = array($token, $timestamp, $nonce);
  49. sort($array, SORT_STRING);
  50. $str = implode($array);
  51. return sha1($str);
  52. } catch (\Exception $e) {
  53. @error_log('getSignature Error: ' . $e->getMessage(), 0);
  54. return FALSE;
  55. }
  56. }
  57. /**
  58. * JS-SDK权限验证的签名
  59. * @param string $jsapi_ticket
  60. * @param string $nonceStr
  61. * @param string $timestamp
  62. * @param string $url
  63. * @return bool|string
  64. */
  65. static function get_jsapi_signature($jsapi_ticket, $nonceStr, $timestamp, $url)
  66. {
  67. //排序
  68. try {
  69. $str = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
  70. return sha1($str);
  71. } catch (\Exception $e) {
  72. @error_log('get_jsapi_signature Error: ' . $e->getMessage(), 0);
  73. return FALSE;
  74. }
  75. }
  76. /**
  77. * 随机生成16位字符串
  78. * @param int $length
  79. * @return string 生成的字符串
  80. */
  81. static function get_random_str($length = 16)
  82. {
  83. $str = "";
  84. $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
  85. $max = strlen($str_pol) - 1;
  86. for ($i = 0; $i < $length; $i++) {
  87. $str .= $str_pol[mt_rand(0, $max)];
  88. }
  89. return $str;
  90. }
  91. /**
  92. * 生成签名算法2
  93. * @param array $params 数据
  94. * @param string $suffix 后缀
  95. * @return string
  96. */
  97. static function getSign2($params, $suffix)
  98. {
  99. ksort($params);
  100. // 格式化参数格式化成url参数
  101. $buff = '';
  102. foreach ($params as $k => $v) {
  103. if($k != 'sign' && $v != '' && !is_array($v)){
  104. $buff .= $k . '=' . $v . '&';
  105. }
  106. }
  107. $buff = trim($buff, '&');
  108. $sign = $buff . '&' . $suffix;
  109. return strtoupper(md5($sign));
  110. }
  111. }