crmeb 多商户系统小程序授权问题解决贴
替换这个方法
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 (! postcachekey);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()]);
}
}
$data = $this->request->params([
['spread_spid', 0],
['spread_code', ''],
['iv', ''],
['encryptedData', ''],
]);
try {
//解密获取用户信息
$userInfo = $miniProgramService->encryptor($session_key, $data['iv'], $data['encryptedData']);
} catch (Exception $e) {
if ($e->getCode() == '-41003') return app('json')->fail('获取会话密匙失败', ['line' => $e->getLine(), 'message' => $e->getMessage()]);
throw $e;
}
if (!$userInfo) return app('json')->fail('openid获取失败');
if (!isset($userInfo['openId'])) $userInfo['openId'] = $userInfoCong['openid'] ?? '';
$userInfo['unionId'] = $userInfoCong['unionid'] ?? $userInfo['unionId'] ?? '';
if (!$userInfo['openId']) return app('json')->fail('openid获取失败');
/** @var WechatUserRepository $make */
$make = app()->make(WechatUserRepository::class);
$user = $make->syncRoutineUser($userInfo['openId'], $userInfo);
if (!$user)
return app('json')->fail('授权失败');
/** @var UserRepository $make */
$userRepository = app()->make(UserRepository::class);
$user[1] = $userRepository->mainUser($user[1]);
$code = intval($data['spread_code']['id'] ?? $data['spread_code']);
//获取是否有扫码进小程序
if ($code && ($info = app()->make(RoutineQrcodeRepository::class)->getRoutineQrcodeFindType($code))) {
$data['spread_spid'] = $info['third_id'];
}
$userRepository->bindSpread($user[1], intval($data['spread_spid']));
$tokenInfo = $userRepository->createToken($user[1]);
$userRepository->loginAfter($user[1]);
return app('json')->success($userRepository->returnToken($user[1], $tokenInfo));
}
完整实例:http://github.crmeb.net/u/defu
还没有评论,来说两句吧...