card.class.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. class card {
  3. static $server_url = 'http://safe.phpcms.cn/index.php';
  4. /**
  5. * 到远程服务器上去取KEY
  6. */
  7. public static function get_key() {
  8. return self::_get_data('?op=key&release='.self::get_release());
  9. }
  10. public static function get_release() {
  11. return pc_base::load_config('version','pc_release');
  12. }
  13. /**
  14. * 卡片的显示地址
  15. * @param $sn 口令卡编号
  16. */
  17. public static function get_pic($sn) {
  18. $key = self::get_key();
  19. return self::$server_url.'?op=card&release='.self::get_release().'&key='.urlencode($key).'&code='.urlencode(self::sys_auth("sn=$sn", 'ENCODE', $key));
  20. }
  21. /**
  22. * 申请新的卡片
  23. * @return 返回卡片的sn
  24. */
  25. public static function creat_card() {
  26. $key = self::get_key();
  27. return self::_get_data('?op=creat_card&release='.self::get_release().'&key='.urlencode($key));
  28. }
  29. /**
  30. * 解除口令卡绑定
  31. * @param string $sn 口令卡编号
  32. */
  33. public static function remove_card($sn) {
  34. $key = self::get_key();
  35. return self::_get_data('?op=remove&release='.self::get_release().'&key='.urlencode($key).'&code='.urlencode(self::sys_auth("sn=$sn", 'ENCODE', $key)));
  36. }
  37. /**
  38. * 请求口令验证码
  39. * @param string $sn 口令卡编号
  40. */
  41. public static function authe_rand($sn) {
  42. $key = self::get_key();
  43. $data = self::_get_data('?op=authe_request&release='.self::get_release().'&key='.urlencode($key).'&code='.urlencode(self::sys_auth("sn=$sn", 'ENCODE', $key)));
  44. return array('rand'=>$data,'url'=>self::$server_url.'?op=show_rand&release='.self::get_release().'&key='.urlencode($key).'&code='.urlencode(self::sys_auth("rand=$data", 'ENCODE', $key)));
  45. }
  46. /**
  47. * 验证动态口令
  48. * @param string $sn 口令卡编号
  49. * @param string $code 用户输入口令
  50. * @param string $rand 随机码
  51. */
  52. public static function verification($sn, $code, $rand) {
  53. $key = self::get_key();
  54. return self::_get_data('?op=verification&release='.self::get_release().'&key='.urlencode($key).'&code='.urlencode(self::sys_auth("sn=$sn&code=$code&rand=$rand", 'ENCODE', $key)), 'index.php?m=admin&c=index&a=public_card');
  55. }
  56. /**
  57. * 请求远程数据
  58. * @param string $url 需要请求的地址。
  59. * @param string $backurl 返回地址
  60. */
  61. private static function _get_data($url, $backurl = '') {
  62. if ($data = @file_get_contents(self::$server_url.$url)) {
  63. $data = json_decode($data, true);
  64. //如果系统是GBK的系统,把UTF8转码为GBK
  65. if (pc_base::load_config('system', 'charset') == 'gbk') {
  66. $data = array_iconv($data, 'utf-8', 'gbk');
  67. }
  68. if ($data['status'] != 1) {
  69. showmessage($data['msg'], $backurl);
  70. } else {
  71. return $data['msg'];
  72. }
  73. } else {
  74. showmessage(L('your_server_it_may_not_have_access_to').self::$server_url.L('_please_check_the_server_configuration'));
  75. }
  76. }
  77. private function sys_auth($txt, $operation = 'ENCODE', $key = '') {
  78. $key = $key ? $key : 'oqjtioxiWRWKLEQJLKj';
  79. $txt = $operation == 'ENCODE' ? (string)$txt : base64_decode($txt);
  80. $len = strlen($key);
  81. $code = '';
  82. for($i=0; $i<strlen($txt); $i++){
  83. $k = $i % $len;
  84. $code .= $txt[$i] ^ $key[$k];
  85. }
  86. $code = $operation == 'DECODE' ? $code : base64_encode($code);
  87. return $code;
  88. }
  89. }