当前位置: 首页 > news >正文

Crmeb二开服务号静默授权登录

序言:

前提这个走不开是基于原来的架构,前后端分离的。

一、前端组织判断是是否有token,token是否有效。

二、如果token无效,则由前端来组装跳转的URI,如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=这个公众号的appid&redirect_uri=前端拿code的URI&response_type=code&scope=snsapi_base&state=123#wechat_redirect

三、拿到token后调用后端接口换token
{{api}}v2/wechat/auth_login?code=aaaaaaa

接口返回:

理想是上面的状态。但是这个Crmeb的开源的静默授权是有问题的。

{{api}}v2/wechat/auth_login?code=aaaaaaa

这个接口在处理显式授权的时候是没有问题的。

但是在处理静默授权的时候会有一个问题。就是以前授权过的用户可以正常过。新用户会有问题,调用微信接口的时候会返回一个错误:

api unauthorized

这是个很棘手的问题,最终追踪到

crmeb/services/easywechat/oauth2/wechat/WechatOauth.php line 148.

/** * 授权获取token * @param string $code * @return false|mixed * @throws HttpException */ public function oauth(string $code = '') { $params = [ 'appid' => $this->appId, 'secret' => $this->secret, 'code' => $code ?: $this->getCode(), 'grant_type' => 'authorization_code', ]; $http = new Http(); $token = $http->parseJSON($http->get(self::API_OAUTH_ACCESS_TOKEN, $params)); if (empty($token[$this->tokenJsonKey])) { throw new HttpException('Request AccessToken fail. response: ' . json_encode($token, JSON_UNESCAPED_UNICODE)); } $this->setCache($token); return $token; }

这个函数看上去也很正常,但是这个问题很奇怪,有些微信用户是正常的,,特别是授权过的。有的就是返回上面的错误。

不纠结这个了,解决问题才是判断。自己写一个吧。

app/services/wechat/WechatServices.php 新增一个函数。

/** * 静默授权登录 * @auther Hotlinhao * @createAt 2026/3/23 20:52 * @return void */ public function baseLogin($code,$spread = '', $agent_id = ''){ $appId = sys_config('wechat_appid'); $secret = sys_config('wechat_appsecret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$secret&code=$code&grant_type=authorization_code"; $res = HttpService::request($url); $res = json_decode($res,true); if(isset($res['errcode']) && intval($res['errcode']) != 0){ throw new ApiException($res['errmsg']); } $wechatInfo = [ 'openid' => $res['openid'], 'nickname' => mt_rand(1000,9999), 'user_type' => 'wechat', ]; //通过openId注册新的用户,并返回token $openid = $res['openid']; /** @var WechatUserServices $wechatUserServices */ $wechatUserServices = app()->make(WechatUserServices::class); $user = $wechatUserServices->getAuthUserInfo($openid, 'wechat'); $createData = [$openid, $wechatInfo, $spread, $agent_id, 'wechat', 'wechat']; $storeUserMobile = sys_config('store_user_mobile'); if ($storeUserMobile && (($user && $user['phone'] == '') || !$user)) { $userInfoKey = md5($openid . '_' . time() . '_wechat'); CacheService::set($userInfoKey, $createData, 7200); return ['bindPhone' => true, 'key' => $userInfoKey]; } $user = $wechatUserServices->wechatOauthAfter($createData); $wechatUserServices->wechatUpdata([$user['uid'], $wechatInfo]); $token = $this->createToken((int)$user['uid'], 'api'); if ($token) { app()->make(UserVisitServices::class)->loginSaveVisit($user); $token['bindPhone'] = false; return [ 'token' => $token['token'], 'expires_time' => $token['params']['exp'], 'bindPhone' => false ]; } else { throw new ApiException(410019); } }

这个函数注册新用户以前就是通过静默来获取Openid,下面就是把上面的authLogn();函数的下半部分,注册用户并返回token拿过来用用。

然后在控制器上调用这个方法即可。

over.

http://www.jsqmd.com/news/525629/

相关文章:

  • OpenClaw关键SKILL技能优化
  • [GESP202603 一级] 数字替换
  • 用map文件揪出STM32隐藏的‘内存杀手‘——以USART库函数为例
  • AudioSeal问题解决:常见格式兼容与密钥恢复,手把手教你搞定
  • OpenClaw技能扩展:用Qwen3.5-4B-Claude实现Markdown文档自动整理
  • 2026卫生级酒瓶盖优质厂家推荐榜:避光瓶、铝塑盖、铝盖、食品级玻璃瓶、儿童安全盖、冻干瓶、医用玻璃瓶、撕拉盖选择指南 - 优质品牌商家
  • 迁移学习轴承诊断DSAN:ResNet50 - LMMD代码实战
  • 安全指纹浏览器排行榜Top10
  • Java 中的 String、StringBuffer 与 StringBuilder:区别、联系与实战选型
  • Fish Speech 1.5生成语音作品集:中英日三语惊艳效果
  • OpenClaw × 组学分析:让 AI 帮你读懂天书般的研究报告
  • SiameseUIE与Java集成开发:构建企业级信息抽取API
  • 音视频SDK深度解析:从技术演进到核心开发要点
  • 万界星空奶油制造工厂MES系统完整解决方案
  • 别再只会用df -h了!CentOS 7/8硬盘监控,这8个命令让你成为运维老手
  • GitHub上传避坑指南:项目太大、关联错误、SSH配置,一次讲清
  • Latex公式中的空格表示
  • 从STP到RSTP:为什么你的网络收敛还是慢?华为/思科设备优化指南
  • Phi-4-reasoning-vision-15B入门必看:图像问答、OCR、表格分析三步实操
  • 仓储空间动态建模与全流程认知计算关键技术攻关——基于镜像视界 Pixel-to-Space、多视角视频融合、动态三维重构、无感定位与轨迹建模的空间计算引擎
  • SiameseAOE模型API接口详解与Python调用实战
  • HarmonyOS Scroll 组件实战:从基础滚动到高级嵌套技巧全解析
  • 嵌入式ARM方向毕设入门指南:从开发环境搭建到第一个裸机程序
  • Tao-8k处理时序数据实战:LSTM模型原理与融合应用
  • 2026景观监控塔优质厂商推荐榜:道路监控塔、钢管监控塔、镀锌烟囱塔架、防火监控塔架、不锈钢烟囱塔架、化工烟囱塔选择指南 - 优质品牌商家
  • OpCore-Simplify:黑苹果智能配置工具的技术革新与效率提升
  • 一般算法题java数组能开多大
  • AI人脸隐私卫士性能优化:批量处理2000张照片实战技巧
  • AI浪潮下,HTML开发者该筑牢哪些核心知识壁垒?
  • 立知多模态重排序模型作品集:多场景图文匹配效果惊艳展示