verifykp.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2018/6/19
  6. * Time: 10:43
  7. */
  8. class ModelVerifykp
  9. {
  10. private $rKey = [
  11. 0 => '18257284-7F5D-348D-AB09-299E5B7DD997',
  12. 1 => '655A957D-157D-7C21-E3A7-9CAAFA835318',
  13. 2 => 'F467CA93-D550-346D-6BCB-173995F7C83A',
  14. 3 => 'BD32817A-99F9-2E26-5B33-15208F7B360A'
  15. ];
  16. /**
  17. * 验证该用户信息的合法性
  18. * @param $data
  19. * @return string
  20. */
  21. public function validateKP($data)
  22. {
  23. if(empty($data)) {
  24. return [];
  25. }
  26. //海外的需要判断是否是这两个个域名,*.100ko.com *.kpzs.com
  27. $verifyurl = $data['verifyurl'];
  28. $tmpUrlArr = parse_url($verifyurl);
  29. $host = $tmpUrlArr['host'] ?? '';
  30. if(empty($host)) {
  31. oo::logs()->debug3('域名解析错误:'.$verifyurl, 'kpVerifyFail.php');
  32. return [];
  33. }
  34. $reg1 = "/.kpzs.com$/";
  35. $reg2 = "/.100ko.com$/";
  36. $ret1= preg_match($reg1, $host);
  37. if(!$ret1) {
  38. $ret2= preg_match($reg2, $host);
  39. if(!$ret2) {
  40. oo::logs()->debug3('域名验证不通过:'.$verifyurl, 'kpVerifyFail.php');
  41. return [];
  42. }
  43. }
  44. $imei = $data['imei'];
  45. $openid = $data['openid'];
  46. $tag = $data['tag'];
  47. $token = $data['token'];
  48. $response = oo::functions()->curl($verifyurl);
  49. $code = $response['code'] ?? 0;
  50. $r = $response['r'] ?? 'A';
  51. $sign = $response['sign'] ?? '';
  52. if(!$code) {
  53. oo::logs()->debug3('登录验证不通过:'.json_encode($response).' data:'.$verifyurl, 'kpVerifyFail.php');
  54. return [];
  55. }
  56. $result = $this->verify($code, $tag, $imei, $token, $r, $sign);
  57. if(!$result) {
  58. oo::logs()->debug3('验签失败: openid: '.$openid.'code:'.$code.' tag:'.$tag.' imei:'.$imei.' token:'.$token.' r:'.$r.' sign:'.$sign, 'kpVerifyFail.php');
  59. return [];
  60. }
  61. return $data;
  62. }
  63. /**
  64. * 对参数进行处理
  65. * @param $data
  66. * @return string
  67. */
  68. private function dealUrlParam($data)
  69. {
  70. $urlParam = '';
  71. foreach ($data as $key => $v) {
  72. $urlParam .= '&'.$key .'='.$v;
  73. }
  74. $urlParam = ltrim($urlParam, '&');
  75. return $urlParam;
  76. }
  77. /**
  78. * 返回验签 SignMD5 规则 :(code 值 tage 值 值 imei 小写值 token 小写值 R 对应的秘钥 Key)Md5
  79. * @param $data
  80. * @return string
  81. */
  82. protected function verify($code, $tag, $imei, $token ,$r, $sign)
  83. {
  84. if(!in_array($r, [0, 1, 2, 3]) || empty($sign)) {
  85. return false;
  86. }
  87. $imei = strtolower($imei);
  88. $token = strtolower($token);
  89. $rKey = $this->rKey[$r];
  90. $signTmp = md5($code.$tag.$imei.$token.$rKey);
  91. if($sign === $signTmp) {
  92. return true;
  93. }
  94. return false;
  95. }
  96. }