verifyhwos.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * LINE相关
  4. */
  5. class ModelVerifyhwos
  6. {
  7. protected $_privateKey = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCM2+tRuKho8j8D5hPJnTrFItWQCaZQ8S0WvUWc2rUiYnc9V5l42Mfvc8weYoT+Na5foaHyljDXtn3rvi3QnrZqwt7vDWlVyP4bMx/tSQVqNInilV0aJlWmkPvKpMK5Ofvh1FsezImSx6SBsnDhJtW4zJDoXmiTaiYWgBzbaMl0/G2Z2Ves30pEWc1/BLFldPgIdrEu+X7Kdq5/1SmCiMKZbIoPXmr3qmZgopdfKET/2c0qoJLRVdFWP93Vw8GiKrTKkGDsZDiGKdJ0vItlugyVExjn480/oGwijOC+mlIPRSTJZOEtC6vwzfSeYrhYL/vlLNhnPRaK4sGz1Xj/IVXdAgMBAAECggEACgbJfFqxmi7ML4HcHLjVaxzsqMEXFqHkPL8iSmUDCbyKklI++Wws5y2N9Qe8QcAedm4x8eug9GnoErTJ3BTAFV9jsQ56VgHlnJgKCMDu4r10py1MoETkSeP+GFGcDsVC2bNc/RdAH7OYUScbg9tY0Tu2gOPfe8bNiUJ7S17tICeQk6SAfUlvvPXt0ZEbtxebQIWee6IdcIzN8g1wvwghpEyzNC6J2RNXXF6BOc5fWBIQXszLI9YQY46McYkFy8TG5yhl8ZGjG3qPEL5vEpoaWamw0hIhmBrq1ubWtUdu/E17a4fzvg6mmCo6qFKJASf53bPg93FQEl3vdYFmQtfkoQKBgQDSpR8eQgN1DiIlF1e/2QPzz2dRzjY2KeJ29wDnUdA94BY5ppYxqCHP2pJZmV0XWtdUQyq2fPPdeqJzZdnr4X5IuP4DfRy1okRNJ5RdINGsOrcNu0sLJxtrpV2BYH++gy0tda6O/KBDQydFo6oWXgOhDQDcC0LMICRXRXqfaSEuNQKBgQCrMCeWHaa19xKSwZ9fns66IdqwzRyQbKb1JDgJF7Qlby4P02v5dJChg9IknzzD0WHvAaCq9fvCfVcQUy/zA21U+Benr0njhZTuidK/aosktv0+t3AAzpKPO7wZEGP8ppLLpPbXUdFjlbwKUaKqAZUrEH1GwSezTdLI2Ylz/uqeCQKBgQCGmtuaw0ZgS6rIFvWM88mRyExWuzZrQDKmIMskBmTS1Vp+dpRtoOoSX7K7rMQPA46sGsu1l31iX1Zl9YTfNdYz9HrlkdKBwvJwd0VYiXtS2qZVEQUwWEoubJqm7RpUjJCXByeH2akzsjrrRl2PM36QMLYG5u9Fb5ipaA2mxlBcrQKBgEnfUOXly8Awa5Jq/ZRs2nbWDyJGkPH+ARo+U/QQh4uz66Omr6yJUbRxRyjIkpdJ7sIN6MB9v/PQ1NZVn5Z1vyNwn/yblv4Y8gjx7sDtgDgKw0PiMvIWMoae12/Vc+BeHXDFskN+qiYYQnoNem10m2NnDTiQN8qXZcOIpFkrAyHJAoGATpY+pqYamwN0NXYbrB9b1HvNGqRp8uptc2agf7AA0FPeH/M620uVx02mL70ypC9b3iGozQM+YS913JQGISeOHot9auqtaYoX15p8BqK9yP15v0bn1EdLebF0YZ04oC39nx8siEnwRHvfynogUAIMeZR/16YiIoGQKazaaH0H0Qk=';
  8. protected $url = 'https://gss-cn.game.hicloud.com/gameservice/api/gbClientApi';
  9. private $_appid = 100440289;
  10. private $_cpid = '890086000102155510';
  11. /**
  12. * 验证该用户信息的合法性
  13. * @param $data
  14. * @return string
  15. */
  16. public function validateHW($data)
  17. {
  18. if(empty($data)) {
  19. return [];
  20. }
  21. $param['method'] = 'external.hms.gs.checkPlayerSign';
  22. $param['appId'] = $this->_appid;
  23. $param['cpId'] = $this->_cpid;
  24. $param['ts'] = $data['ts'];
  25. $param['playerId'] = $data['playerId'];
  26. $param['playerLevel'] = $data['playerLevel'];
  27. $playerSSign = $data['playerSSign'];
  28. $playerSSign = str_replace('\\', '', $playerSSign);
  29. $playerSSign = str_replace(' ', '+', $playerSSign);
  30. $param['playerSSign'] = $playerSSign;
  31. $urlParam = $this->dealUrlParam($param);
  32. $signature = $this->sign($urlParam);
  33. if(empty($signature)) {
  34. oo::logs()->debug3('生成签名 signature:'.$signature.' urlParam:'.$urlParam, 'hwosVerifyFail.php');
  35. return [];
  36. }
  37. $param['cpSign'] = $signature;
  38. $res = oo::functions()->curl($this->url, $param);
  39. $rtnCode = $res['rtnCode'] ?? -1;
  40. if($rtnCode !== 0){
  41. oo::logs()->debug3('登录验证不通过:'.json_encode($res).' data:'.json_encode($param), 'hwosVerifyFail.php');
  42. return [];
  43. }
  44. //验签
  45. $paramRet = $res;
  46. $rtnSign = $res['rtnSign'];
  47. unset($paramRet['rtnSign']);
  48. $retParam = $this->dealUrlParam($paramRet);
  49. $retSignature = $this->sign($retParam);
  50. if($retSignature != $rtnSign){
  51. oo::logs()->debug3('登录验证不通过:retSign:'.json_encode($retSignature).' rtnSign:'.json_encode($rtnSign), 'hwosVerifyFail.php');
  52. return [];
  53. }
  54. return $data;
  55. }
  56. public function hwcurl($url, $postData)
  57. {
  58. $curl = curl_init();
  59. curl_setopt($curl, CURLOPT_URL, $url);
  60. curl_setopt($curl, CURLOPT_HEADER, 1);
  61. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  62. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
  63. curl_setopt($curl, CURLOPT_POST, true);
  64. curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
  65. $data = curl_exec($curl);
  66. curl_close($curl);
  67. return json_decode($data, 1);
  68. }
  69. private function sign($sign, $algo = 'SHA256')
  70. {
  71. $key = "-----BEGIN PRIVATE KEY-----\n".chunk_split( $this->_privateKey, 64, "\n" ).'-----END PRIVATE KEY-----';
  72. $key = openssl_pkey_get_private( $key );
  73. if ( empty( $key ) )
  74. {
  75. return 'Please pass a Base64-encoded private key from the Market portal';
  76. }
  77. $signature = '';
  78. openssl_sign($sign, $signature, $key, $algo);
  79. $sign = base64_encode($signature);
  80. return $sign;
  81. }
  82. /**
  83. * 对参数进行处理
  84. * @param $data
  85. * @return string
  86. */
  87. private function dealUrlParam($data)
  88. {
  89. $urlParam = '';
  90. //按ascii码升序排列
  91. ksort($data);
  92. foreach ($data as $key => $v) {
  93. // if(empty($v)) {
  94. // continue;
  95. // }
  96. $v = urlencode($v);
  97. $urlParam .= '&'.$key .'='.$v;
  98. }
  99. $urlParam = ltrim($urlParam, '&');
  100. return $urlParam;
  101. }
  102. /**
  103. * 使用RSA算法 SHA1WithRSA进行签名 --取消(SHA256WithRSA)
  104. * @param $data
  105. * @return string
  106. */
  107. protected function verify($data, $signature)
  108. {
  109. $key = "-----BEGIN PUBLIC KEY-----\n".chunk_split( $this->_publicKey, 64, "\n" ).'-----END PUBLIC KEY-----';
  110. $key = openssl_get_publickey( $key );
  111. if ( empty( $key ) )
  112. {
  113. return 'Please pass a Base64-encoded public key from the Market portal';
  114. }
  115. $signature = str_replace('\\', '', $signature);
  116. $signature = str_replace(' ', '+', $signature);
  117. $result = openssl_verify( $data, base64_decode( $signature ), $key, OPENSSL_ALGO_SHA1 );
  118. if ( 0 === $result )
  119. {
  120. oo::logs()->debug3('openssl error string:'.openssl_error_string()."\n".' 验签的参数:'.$data."\n".' 验签的signature:'.$signature, 'hw_verify.php');
  121. return 'fail to verify';
  122. }
  123. else if ( 1 !== $result )
  124. {
  125. return 'Unknown error verifying the signature in openssl_verify '.$result;
  126. }
  127. return '';
  128. }
  129. }