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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CRMEB定制开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值