crmeb 多商户系统小程序授权问题解决贴

超、凢脫俗 2023-01-19 12:59 106阅读 0赞

在这里插入图片描述

替换这个方法

public function mpAuth()
{
list($code, $post_cache_key) = $this->request->params([
‘code’,
‘cache_key’,
], true);
$session_key = Cache::get(‘eb_api_code_’ . p o s t c a c h e k e y ) ; i f ( ! post_cache_key); if (! postc​achek​ey);if(!code && !$session_key)
return app(‘json’)->fail(‘授权失败,参数有误’);
m i n i P r o g r a m S e r v i c e = M i n i P r o g r a m S e r v i c e : : c r e a t e ( ) ; i f ( miniProgramService = MiniProgramService::create(); if ( miniProgramService=MiniProgramService::create();if(code && !$session_key) {
try {
$userInfoCong = m i n i P r o g r a m S e r v i c e − > g e t U s e r I n f o ( miniProgramService->getUserInfo( miniProgramService−>getUserInfo(code);
$session_key = $userInfoCong[‘session_key’];
$cache_key = md5(time() . $code);
Cache::set(‘eb_api_code_’ . $cache_key, $session_key, 86400);
} catch (Exception $e) {
return app(‘json’)->fail(‘获取session_key失败,请检查您的配置!’, [‘line’ => $e->getLine(), ‘message’ => $e->getMessage()]);
}
}

  1. $data = $this->request->params([
  2. ['spread_spid', 0],
  3. ['spread_code', ''],
  4. ['iv', ''],
  5. ['encryptedData', ''],
  6. ]);
  7. try {
  8. //解密获取用户信息
  9. $userInfo = $miniProgramService->encryptor($session_key, $data['iv'], $data['encryptedData']);
  10. } catch (Exception $e) {
  11. if ($e->getCode() == '-41003') return app('json')->fail('获取会话密匙失败', ['line' => $e->getLine(), 'message' => $e->getMessage()]);
  12. throw $e;
  13. }
  14. if (!$userInfo) return app('json')->fail('openid获取失败');
  15. if (!isset($userInfo['openId'])) $userInfo['openId'] = $userInfoCong['openid'] ?? '';
  16. $userInfo['unionId'] = $userInfoCong['unionid'] ?? $userInfo['unionId'] ?? '';
  17. if (!$userInfo['openId']) return app('json')->fail('openid获取失败');
  18. /** @var WechatUserRepository $make */
  19. $make = app()->make(WechatUserRepository::class);
  20. $user = $make->syncRoutineUser($userInfo['openId'], $userInfo);
  21. if (!$user)
  22. return app('json')->fail('授权失败');
  23. /** @var UserRepository $make */
  24. $userRepository = app()->make(UserRepository::class);
  25. $user[1] = $userRepository->mainUser($user[1]);
  26. $code = intval($data['spread_code']['id'] ?? $data['spread_code']);
  27. //获取是否有扫码进小程序
  28. if ($code && ($info = app()->make(RoutineQrcodeRepository::class)->getRoutineQrcodeFindType($code))) {
  29. $data['spread_spid'] = $info['third_id'];
  30. }
  31. $userRepository->bindSpread($user[1], intval($data['spread_spid']));
  32. $tokenInfo = $userRepository->createToken($user[1]);
  33. $userRepository->loginAfter($user[1]);
  34. return app('json')->success($userRepository->returnToken($user[1], $tokenInfo));
  35. }

完整实例:http://github.crmeb.net/u/defu

发表评论

表情:
评论列表 (有 0 条评论,106人围观)

还没有评论,来说两句吧...

相关阅读