verifyhw.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * LINE相关
  4. */
  5. class ModelVerifyhw
  6. {
  7. protected $_publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoLnQerStmIxnvoXytYKHCKiGDBG8LDjt4fRWbXkr9Na3V2j6rIs42pN/ItiFfA2zNlUnbsCGDcQ/JYEtbBasAR92RDwEwwkckdGdzIiNzmQpB2uTh6Q+wlHCh+vFfnoRkIDdLr97lemZGEmJea8yW3W9aymNPBMDCDvhV/CO/tGuJZ4xLIA0yLd5T73WoqaTlt0HoJZdNnixhbuC8a/gnEvPUM6A9ZxZIfl+7A6EpuHBq3vUvH1SgMQatC7BCKSUiqZDdgnjj/PX7i4OJFC3klQek2DVQoVBfyyPdUTSlY8hT+RqUN1xD9t+jllEjeAkVqf+VsgycgguS1Sj4PhNiwIDAQAB';
  8. /**
  9. * 验证该用户信息的合法性
  10. * @param $data
  11. * @return string
  12. */
  13. public function validateHW($data)
  14. {
  15. if(empty($data)) {
  16. return [];
  17. }
  18. $signature = $data['signature'];
  19. unset($data['signature']);
  20. $urlParam = $this->dealUrlParam($data);
  21. $cpSign = $this->verify($urlParam, $signature);
  22. if(!empty($cpSign)) {
  23. oo::logs()->debug3('cpsign:'.$cpSign.' urlParam:'.$urlParam, 'hwVerifyFail.php');
  24. return [];
  25. }
  26. return $data;
  27. }
  28. /**
  29. * 对参数进行处理
  30. * @param $data
  31. * @return string
  32. */
  33. private function dealUrlParam($data)
  34. {
  35. $urlParam = '';
  36. //按ascii码升序排列
  37. ksort($data);
  38. foreach ($data as $key => $v) {
  39. if(empty($v)) {
  40. continue;
  41. }
  42. // $v = urldecode($v);
  43. $urlParam .= '&'.$key .'='.$v;
  44. }
  45. $urlParam = ltrim($urlParam, '&');
  46. return $urlParam;
  47. }
  48. /**
  49. * 使用RSA算法 SHA1WithRSA进行签名 --取消(SHA256WithRSA)
  50. * @param $data
  51. * @return string
  52. */
  53. protected function verify($data, $signature)
  54. {
  55. $key = "-----BEGIN PUBLIC KEY-----\n".chunk_split( $this->_publicKey, 64, "\n" ).'-----END PUBLIC KEY-----';
  56. $key = openssl_get_publickey( $key );
  57. if ( empty( $key ) )
  58. {
  59. return 'Please pass a Base64-encoded public key from the Market portal';
  60. }
  61. $signature = str_replace('\\', '', $signature);
  62. $signature = str_replace(' ', '+', $signature);
  63. $result = openssl_verify( $data, base64_decode( $signature ), $key, OPENSSL_ALGO_SHA1 );
  64. if ( 0 === $result )
  65. {
  66. oo::logs()->debug3('openssl error string:'.openssl_error_string()."\n".' 验签的参数:'.$data."\n".' 验签的signature:'.$signature, 'hw_verify.php');
  67. return 'fail to verify';
  68. }
  69. else if ( 1 !== $result )
  70. {
  71. return 'Unknown error verifying the signature in openssl_verify '.$result;
  72. }
  73. return '';
  74. }
  75. }