Login.php 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace app\ebapi\controller;
  3. use think\Cache;
  4. use think\Controller;
  5. use think\Request;
  6. use service\JsonService;
  7. use service\UtilService;
  8. use app\core\util\MiniProgramService;
  9. use app\core\util\TokenService;
  10. use app\ebapi\model\user\WechatUser;
  11. use app\core\logic\Login as CoreLogin;
  12. class Login extends Controller
  13. {
  14. /*
  15. * 执行登录
  16. * */
  17. public function _empty($name)
  18. {
  19. CoreLogin::login_ing($name);
  20. }
  21. /**
  22. * 获取用户信息
  23. * @param Request $request
  24. * @return \think\response\Json
  25. */
  26. public function index(Request $request){
  27. //待完善
  28. $data = UtilService::postMore([
  29. ['spid',0],
  30. ['code',''],
  31. ['iv',''],
  32. ['encryptedData',''],
  33. ['cache_key',''],
  34. ],$request);//获取前台传的code
  35. if(!Cache::has('eb_api_code_'.$data['cache_key'])) return JsonService::status('410','获取会话密匙失败');
  36. $data['session_key']=Cache::get('eb_api_code_'.$data['cache_key']);
  37. try{
  38. //解密获取用户信息
  39. $userInfo = $this->decryptCode($data['session_key'], $data['iv'], $data['encryptedData']);
  40. }catch (\Exception $e){
  41. if($e->getCode()=='-41003') return JsonService::status('410','获取会话密匙失败');
  42. }
  43. if(!isset($userInfo['openId'])) return JsonService::fail('openid获取失败');
  44. if(!isset($userInfo['unionId'])) $userInfo['unionId'] = '';
  45. $userInfo['session_key'] = $data['session_key'];
  46. $userInfo['spid'] = $data['spid'];
  47. $userInfo['code'] = $data['code'];
  48. $dataOauthInfo = WechatUser::routineOauth($userInfo);
  49. $userInfo['uid'] = $dataOauthInfo['uid'];
  50. $userInfo['page'] = $dataOauthInfo['page'];
  51. $userInfo['token'] = TokenService::getToken($userInfo['uid'],$userInfo['openId']);
  52. if($userInfo['token']===false) return JsonService::fail('获取用户访问token失败!');
  53. $userInfo['status'] = WechatUser::isUserStatus($userInfo['uid']);
  54. return JsonService::successful($userInfo);
  55. }
  56. /**
  57. * 根据前台传code 获取 openid 和 session_key //会话密匙
  58. * @param string $code
  59. * @return array|mixed
  60. */
  61. public function setCode(Request $request){
  62. list($code) = UtilService::postMore([['code', '']], $request, true);//获取前台传的code
  63. if ($code == '') return JsonService::fail('');
  64. try{
  65. $userInfo = MiniProgramService::getUserInfo($code);
  66. }catch (\Exception $e){
  67. return JsonService::fail('获取session_key失败,请检查您的配置!',['line'=>$e->getLine(),'message'=>$e->getMessage()]);
  68. }
  69. $cache_key = md5(time().$code);
  70. if (isset($userInfo['session_key'])){
  71. Cache::set('eb_api_code_'.$cache_key, $userInfo['session_key'], 86400);
  72. return JsonService::successful(['cache_key'=>$cache_key]);
  73. }else
  74. return JsonService::fail('获取会话密匙失败');
  75. }
  76. /**
  77. * 解密数据
  78. * @param string $code
  79. * @return array|mixed
  80. */
  81. public function decryptCode($session = '', $iv = '', $encryptData = '')
  82. {
  83. if (!$session) return JsonService::fail('session参数错误');
  84. if (!$iv) return JsonService::fail('iv参数错误');
  85. if (!$encryptData) return JsonService::fail('encryptData参数错误');
  86. return MiniProgramService::encryptor($session, $iv, $encryptData);
  87. }
  88. }