MemberFactory.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 17/2/23
  6. * Time: 下午2:27
  7. */
  8. namespace app\frontend\modules\member\services\factory;
  9. use app\common\exceptions\ShopException;
  10. use app\common\helpers\Client;
  11. use app\common\models\Member;
  12. use app\frontend\modules\member\services\MemberAnchorAppService;
  13. use app\frontend\modules\member\services\MemberAppLspWalletService;
  14. use app\frontend\modules\member\services\MemberAppYdbService;
  15. use app\frontend\modules\member\services\MemberBusinessScanCodeService;
  16. use app\frontend\modules\member\services\MemberCpsAppService;
  17. use app\frontend\modules\member\services\MemberDouyinService;
  18. use app\frontend\modules\member\services\MemberMiniAppFaceService;
  19. use app\frontend\modules\member\services\MemberMobileService;
  20. use app\frontend\modules\member\services\MemberNativeAppService;
  21. use app\frontend\modules\member\services\MemberPcOfficeAccountService;
  22. use app\frontend\modules\member\services\MemberTFBService;
  23. use app\frontend\modules\member\services\MemberTjpCpsService;
  24. use app\frontend\modules\member\services\MemberWechatService;
  25. use app\frontend\modules\member\services\MemberAppWechatService;
  26. use app\frontend\modules\member\services\MemberMiniAppService;
  27. use app\frontend\modules\member\services\MemberOfficeAccountService;
  28. use app\frontend\modules\member\services\MemberQQService;
  29. use app\frontend\modules\member\services\MemberAlipayService;
  30. use app\frontend\modules\member\services\SmsCodeService;
  31. use app\frontend\modules\member\services\MemberWechatQrcodeService;
  32. use Yunshop\Freelogin\common\service\FreeloginService;
  33. use Yunshop\WechatChatSidebar\frontend\service\MemberWorkService;
  34. class MemberFactory
  35. {
  36. const LOGIN_OFFICE_ACCOUNT = 1;
  37. const LOGIN_MINI_APP = 2;
  38. const LOGIN_APP_WECHAT = 3;
  39. const LOGIN_WECHAT = 4;
  40. const LOGIN_MOBILE = 5;
  41. const LOGIN_QQ = 6;
  42. const LOGIN_APP_YDB = 7;
  43. const LOGIN_ALIPAY = 8;
  44. const LOGIN_Native = 9;
  45. const LOGIN_MOBILE_CODE = 10;
  46. const LOGIN_DOUYIN = 11;
  47. const LOGIN_MINI_APP_FACE = 12;
  48. const LOGIN_APP_ANCHOR = 14;
  49. const LOGIN_APP_CPS = 15;
  50. const LOGIN_PC_OFFICE_ACCOUNT = 16;
  51. const LOGIN_WORK = 17;
  52. const LOGIN_APP_LSP_WALLET = 18;
  53. const LOGIN_BUSINESS_SCAN_CODE = 19; //企业微信pc端扫码登录
  54. public static function create(&$type = null)
  55. {
  56. $className = null;
  57. $scope = request()->input('scope');
  58. $is_pc_qrcode = request()->input('is_pc_qrcode') ?: 0;//1-PC扫码登录 0-否
  59. if (empty($type) || $type == 'undefined') {
  60. $type = Client::getType();
  61. }
  62. switch ($scope) {
  63. case 'tfb':
  64. return new MemberTFBService();
  65. case 'freelogin':
  66. return new FreeloginService();
  67. case 'tjpcps':
  68. if (request()->app_token && app('plugins')->isEnabled('aggregation-cps') && (!request()->appid || \Yunshop\AggregationCps\services\SettingManageService::getTrueKey() == request()->appid)) {
  69. return new MemberTjpCpsService();
  70. }
  71. break;
  72. case 'yearendbox':
  73. if (app('plugins')->isEnabled('year-end-box')) {
  74. // 插件: 年末礼盒
  75. return new \Yunshop\YearEndBox\services\YearEndBoxLoginService();
  76. }
  77. break;
  78. case 'jinepay':
  79. if (app('plugins')->isEnabled('jinepay')) {
  80. // 插件: 锦银E付
  81. return new \Yunshop\Jinepay\services\LoginService();
  82. }
  83. break;
  84. case 'yzx_pay':
  85. if (app('plugins')->isEnabled('code-science-pay') && \Setting::get('code-science-pay.set.plugin_enable')) {
  86. // 插件: 豫章行代金券支付
  87. return new \Yunshop\CodeSciencePay\services\CodeSciencePayLogin();
  88. }
  89. break;
  90. }
  91. if (Client::setWechatByMobileLogin($type)) {
  92. $type = self::LOGIN_MOBILE;
  93. }
  94. $registerSet = \Setting::get('shop.register');
  95. if ((!$registerSet['login_mode'] || in_array('mobile_code', $registerSet['login_mode'])) && request()->input('is_sms') == 1) {
  96. // todo 待优化,需要考虑其他很多种情况
  97. $type = self::LOGIN_MOBILE_CODE;
  98. }
  99. // 小程序-智能相册webview加载
  100. if ($type == self::LOGIN_MINI_APP && request()->input('webview') == 1) {
  101. $type = self::LOGIN_OFFICE_ACCOUNT;
  102. }
  103. switch ($type) {
  104. case self::LOGIN_OFFICE_ACCOUNT:
  105. $className = new MemberOfficeAccountService();
  106. break;
  107. case self::LOGIN_MINI_APP:
  108. $className = new MemberMiniAppService();
  109. break;
  110. case self::LOGIN_APP_WECHAT:
  111. $className = new MemberAppWechatService();
  112. break;
  113. case self::LOGIN_WECHAT:
  114. $className = new MemberWechatService();
  115. break;
  116. case self::LOGIN_MOBILE:
  117. if ((int)$is_pc_qrcode == 1) {
  118. $className = new MemberWechatQrcodeService();
  119. break;
  120. } else {
  121. $className = new MemberMobileService();
  122. break;
  123. }
  124. case self::LOGIN_QQ:
  125. $className = new MemberQQService();
  126. break;
  127. case self::LOGIN_APP_YDB:
  128. $className = new MemberAppYdbService();
  129. break;
  130. case self::LOGIN_ALIPAY:
  131. $className = new MemberAlipayService();
  132. break;
  133. case self::LOGIN_Native:
  134. $className = new MemberNativeAppService();
  135. break;
  136. case self::LOGIN_MOBILE_CODE:
  137. $className = new SmsCodeService();
  138. break;
  139. case self::LOGIN_DOUYIN:
  140. $className = new MemberDouyinService();
  141. break;
  142. case self::LOGIN_MINI_APP_FACE:
  143. $className = new MemberMiniAppFaceService();
  144. break;
  145. case self::LOGIN_APP_ANCHOR:
  146. $className = new MemberAnchorAppService();
  147. break;
  148. case self::LOGIN_APP_CPS:
  149. $className = new MemberCpsAppService();
  150. break;
  151. case self::LOGIN_PC_OFFICE_ACCOUNT:
  152. $className = new MemberPcOfficeAccountService();
  153. break;
  154. case self::LOGIN_WORK:
  155. $query_string = $_SERVER['QUERY_STRING'];
  156. if (strpos($query_string, 'client=work')) {
  157. $className = new MemberWorkService();
  158. } else {
  159. $className = new MemberOfficeAccountService();
  160. }
  161. break;
  162. case self::LOGIN_APP_LSP_WALLET:
  163. $className = new MemberAppLspWalletService();
  164. break;
  165. case self::LOGIN_BUSINESS_SCAN_CODE:
  166. $className = new MemberBusinessScanCodeService();
  167. break;
  168. default:
  169. throw new ShopException('应用登录授权失败', ['login_status' => -4]);
  170. }
  171. return $className;
  172. }
  173. }