Application.php 1.8 KB

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