AuthController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace app\api\controller\wechat;
  3. use app\models\user\WechatUser;
  4. use app\Request;
  5. use crmeb\services\MiniProgramService;
  6. use crmeb\services\UtilService;
  7. use app\models\user\UserToken;
  8. use crmeb\services\SystemConfigService;
  9. use app\models\user\User;
  10. use app\models\routine\RoutineFormId;
  11. use think\facade\Cache;
  12. class AuthController
  13. {
  14. /*
  15. * 小程序授权登录
  16. * @param json
  17. *
  18. * */
  19. public function mp_auth(Request $request)
  20. {
  21. $cache_key = '';
  22. list($code,$post_cache_key,$login_type) = UtilService::postMore([
  23. ['code',''],
  24. ['cache_key',''],
  25. ['login_type','']
  26. ],$request,true);
  27. $session_key = Cache::get('eb_api_code_'.$post_cache_key);
  28. if (!$code && !$session_key)
  29. return app('json')->fail('授权失败,参数有误');
  30. if($code && !$session_key){
  31. try {
  32. $userInfoCong = MiniProgramService::getUserInfo($code);
  33. $session_key = $userInfoCong['session_key'];
  34. $cache_key = md5(time().$code);
  35. Cache::set('eb_api_code_'.$cache_key,$session_key,86400);
  36. } catch (\Exception $e) {
  37. return app('json')->fail('获取session_key失败,请检查您的配置!', ['line' => $e->getLine(), 'message' => $e->getMessage()]);
  38. }
  39. }
  40. $data = UtilService::postMore([
  41. ['spread_spid', 0],
  42. ['spread_code', ''],
  43. ['iv', ''],
  44. ['encryptedData', ''],
  45. ]);//获取前台传的code
  46. try {
  47. //解密获取用户信息
  48. $userInfo = MiniProgramService::encryptor($session_key, $data['iv'], $data['encryptedData']);
  49. } catch (\Exception $e) {
  50. if ($e->getCode() == '-41003') return app('json')->fail('获取会话密匙失败');
  51. }
  52. if (!isset($userInfo['openId'])) return app('json')->fail('openid获取失败');
  53. if (!isset($userInfo['unionId'])) $userInfo['unionId'] = '';
  54. $userInfo['spid'] = $data['spread_spid'];
  55. $userInfo['code'] = $data['spread_code'];
  56. $userInfo['session_key'] = $session_key;
  57. $userInfo['login_type'] = $login_type;
  58. $dataOauthInfo = WechatUser::routineOauth($userInfo);
  59. $userInfo['uid'] = $dataOauthInfo['uid'];
  60. $userInfo['page'] = $dataOauthInfo['page'];
  61. $userInfo = User::where('uid',$dataOauthInfo['uid'])->find();
  62. if($userInfo->login_type == 'h5' && ($h5UserInfo = User::where(['account'=>$userInfo->phone,'phone'=>$userInfo->phone,'user_type'=>'h5'])->find()))
  63. $token = UserToken::createToken($userInfo, 'routine');
  64. else
  65. $token = UserToken::createToken($userInfo, 'routine');
  66. if($token) {
  67. event('UserLogin', [$userInfo, $token]);
  68. return app('json')->successful('登陆成功!', [
  69. 'token' => $token->token,
  70. 'userInfo' => $userInfo,
  71. 'expires_time' => strtotime($token->expires_time),
  72. 'cache_key' => $cache_key
  73. ]);
  74. }else
  75. return app('json')->fail('获取用户访问token失败!');
  76. }
  77. /*
  78. * 获取小程序授权logo
  79. * */
  80. public function get_logo()
  81. {
  82. $routine_logo=SystemConfigService::get('routine_logo');
  83. if(strstr($routine_logo,'http')===false) $routine_logo = SystemConfigService::get('site_url').$routine_logo;
  84. return app('json')->successful(['logo_url'=>str_replace('\\','/',$routine_logo)]);
  85. }
  86. /*
  87. * 保存form id
  88. *
  89. * */
  90. public function set_form_id(Request $request)
  91. {
  92. $formId = $request->post('formId','');
  93. if(!$formId) return app('json')->fail('缺少form id');
  94. RoutineFormId::SetFormId($formId,$request->uid);
  95. return app('json')->successful('保存form id 成功!',['uid'=>$request->uid]);
  96. }
  97. /*
  98. * 小程序支付回调
  99. * */
  100. public function notify()
  101. {
  102. MiniProgramService::handleNotify();
  103. }
  104. }