class_captcha.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: class_captcha.php 33997 2013-09-17 06:46:37Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. define('CLOUDCAPTCHA_GET_URL', 'http://api.discuz.qq.com/captcha/get');
  12. define('CLOUDCAPTCHA_VALIDATE_URL', 'http://api.discuz.qq.com/captcha/validate');
  13. define('CLOUDCAPTCHA_ISNEED_URL', 'http://api.discuz.qq.com/captcha/isNeed');
  14. define('CLOUDCAPTCHA_REPORT_URL', 'http://api.discuz.qq.com/captcha/report');
  15. define('CLOUDCAPTCHA_VER', '1.0');
  16. class captcha {
  17. public function generateSiteSignUrl($params = array()) {
  18. global $_G;
  19. $utilService = Cloud::loadClass('Service_Util');
  20. @include_once DISCUZ_ROOT.'./source/discuz_version.php';
  21. if(!isset($_G['member']['conopenid'])) {
  22. $member_connect = $_G['uid'] ? C::t('#qqconnect#common_member_connect')->fetch($_G['uid']) : array();
  23. $_G['member'] = array_merge($_G['member'], $member_connect);
  24. }
  25. $ts = TIMESTAMP;
  26. $sKey = $_G['setting']['my_sitekey'];
  27. $params['clientIp'] = $_G['clientip'];
  28. $params['uid'] = $_G['uid'];
  29. $params['openId'] = getuserprofile('conopenid');
  30. $params['sId'] = $_G['setting']['siteuniqueid'];
  31. $params['appId'] = $_G['setting']['connectappid'];
  32. $params['ver'] = CLOUDCAPTCHA_VER;
  33. $params['dzVersion'] = DISCUZ_VERSION;
  34. $params['sId'] = $_G['setting']['my_siteid'];
  35. ksort($params);
  36. $str = $utilService->httpBuildQuery($params, '', '&');
  37. $sig = md5(sprintf('%s|%s|%s', $str, $sKey, $ts));
  38. $params['ts'] = $ts;
  39. $params['sig'] = $sig;
  40. $params = $utilService->httpBuildQuery($params, '', '&');
  41. return $params;
  42. }
  43. public function cookie_parse($line) {
  44. $cookies = array();
  45. foreach(explode(';', $line) as $data) {
  46. $cinfo = explode('=', $data);
  47. $cinfo[0] = trim($cinfo[0]);
  48. if(!in_array($cinfo[0], array('domain', 'expires', 'path', 'secure', 'comment'))) {
  49. $cookies[$cinfo[0]] = $cinfo[1];
  50. }
  51. }
  52. return $cookies;
  53. }
  54. public function get($refresh, $modid) {
  55. global $_G;
  56. $params = array(
  57. 'rule' => $_G['cookie']['seccloud'] ? 2 : 1,
  58. 'refresh' => $refresh ? 1 : 0,
  59. 'oper' => $modid,
  60. );
  61. return dfsockopen(CLOUDCAPTCHA_GET_URL.'?'.captcha::generateSiteSignUrl($params));
  62. }
  63. public function validate($code, $picSig, $fromjs, $modid) {
  64. global $_G;
  65. if(!$code || strlen($code) != 4) {
  66. return false;
  67. }
  68. $params = array(
  69. 'code' => $code,
  70. 'picSig' => $picSig,
  71. 'rule' => $_G['cookie']['seccloud'] ? 2 : 1,
  72. 'isJSReq' => $fromjs ? 1 : 0,
  73. 'oper' => $modid,
  74. );
  75. return dfsockopen(CLOUDCAPTCHA_VALIDATE_URL.'?'.captcha::generateSiteSignUrl($params));
  76. }
  77. public function isneed() {
  78. return dfsockopen(CLOUDCAPTCHA_ISNEED_URL.'?'.captcha::generateSiteSignUrl()) == '{"errCode":0,"res":"yes"}';
  79. }
  80. public function report($content = array()) {
  81. $params = array(
  82. 'type' => 1,
  83. 'content' => (array)$content,
  84. );
  85. return dfsockopen(CLOUDCAPTCHA_REPORT_URL.'?'.captcha::generateSiteSignUrl($params));
  86. }
  87. }
  88. ?>