PayUtils.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace common\pay\balpal;
  3. class PayUtils
  4. {
  5. /**
  6. * @var array
  7. */
  8. public static $hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
  9. /**
  10. * @param array $data
  11. * @param string $secretKey
  12. * @return string
  13. */
  14. public static function makeSign($data, $secretKey)
  15. {
  16. ksort($data);
  17. $str = '';
  18. foreach ((array)$data as $key => $value) {
  19. if ($key == 'signData' || $key == 'signType') {
  20. continue;
  21. }
  22. $value = strval($value);
  23. if ($value === '') {
  24. continue;
  25. }
  26. $str .= "{$key}={$value}&";
  27. }
  28. $str = rtrim($str, '&');
  29. return self::strToHex(hash_hmac('sha1', $str, $secretKey, true));
  30. }
  31. /**
  32. * @param array $data
  33. * @param string $secretKey
  34. * @return bool
  35. */
  36. public static function checkSign($data, $secretKey)
  37. {
  38. $sign = isset($data['signData']) ? $data['signData'] : '';
  39. if ($sign == '') {
  40. return false;
  41. }
  42. return self::makeSign($data, $secretKey) == $sign;
  43. }
  44. /**
  45. * @param string $str
  46. * @return string
  47. */
  48. public static function strToHex($str)
  49. {
  50. $hexStr = '';
  51. for ($i = 0, $len = strlen($str); $i < $len; $i++) {
  52. $ascii = ord($str[$i]); // 0 - 255
  53. $hexStr .= self::$hex[$ascii >> 4 & 0x0f]; // 高4位
  54. $hexStr .= self::$hex[$ascii & 0x0f]; // 低4位
  55. }
  56. return $hexStr;
  57. }
  58. }