Application.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace fast\third;
  3. use think\Config;
  4. class Application
  5. {
  6. /**
  7. * 配置信息
  8. * @var array
  9. */
  10. private $config = [];
  11. /**
  12. * 服务提供者
  13. * @var array
  14. */
  15. private $providers = [
  16. 'qq' => 'Qq',
  17. 'weibo' => 'Weibo',
  18. 'wechat' => 'Wechat',
  19. ];
  20. /**
  21. * 服务对象信息
  22. * @var array
  23. */
  24. protected $services = [];
  25. public function __construct($options = [])
  26. {
  27. if ($config = Config::get('third'))
  28. {
  29. $this->config = array_merge($this->config, $config);
  30. }
  31. $this->config = array_merge($this->config, is_array($options) ? $options : []);
  32. //注册服务器提供者
  33. $this->registerProviders();
  34. }
  35. /**
  36. * 注册服务提供者
  37. */
  38. private function registerProviders()
  39. {
  40. foreach ($this->providers as $k => $v)
  41. {
  42. $this->services[$k] = function() use ($k, $v)
  43. {
  44. $options = $this->config[$k];
  45. $options['app_id'] = isset($options['app_id']) ? $options['app_id'] : '';
  46. $options['app_secret'] = isset($options['app_secret']) ? $options['app_secret'] : '';
  47. // 如果未定义回调地址则自动生成
  48. $options['callback'] = isset($options['callback']) && $options['callback'] ? $options['callback'] : url('user/third?action=callback&platform=' . $k, [], false, true);
  49. // 如果非http地址则转换一下
  50. $options['callback'] = substr($options['callback'], 0, 7) == 'http://' || substr($options['callback'], 0, 8) == 'https://' ? $options['callback'] : url($options['callback'], '', false, true);
  51. $objname = __NAMESPACE__ . "\\{$v}";
  52. return new $objname($options);
  53. };
  54. }
  55. }
  56. public function __set($key, $value)
  57. {
  58. $this->services[$key] = $value;
  59. }
  60. public function __get($key)
  61. {
  62. return $this->services[$key]($this);
  63. }
  64. }