shish 1 місяць тому
батько
коміт
31fa01fc39
1 змінених файлів з 11 додано та 3 видалено
  1. 11 3
      app-hd/controllers/AuthController.php

+ 11 - 3
app-hd/controllers/AuthController.php

@@ -643,7 +643,13 @@ class AuthController extends PublicController
         util::success(['token' => $token, 'account' => $sjId, 'shopId' => $currentShopId, 'imgUploadApi' => $imgUploadApi, 'switchShop' => $switchShop,]);
     }
 
-    //静默获取小程序用户信息
+    /**
+     * 静默获取小程序用户信息
+     * 职责:通过微信小程序 code 换取 openid 和 session_key 并自动登录
+     * 入参:GET 传参 code (微信临时登录凭证)
+     * 返回:登录成功返回 token、用户信息、店铺 ID 等;失败返回空 token
+     * 副作用:会更新管理员的最后登录时间,并将 session_key 写入 Redis 缓存
+     */
     public function actionMiniInfo()
     {
         //花店平台
@@ -660,6 +666,10 @@ class AuthController extends PublicController
         $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appId}&secret={$appSecret}&js_code={$code}&grant_type=authorization_code";
         $curl = new curl\Curl();
         $curl->setOption(CURLOPT_SSL_VERIFYPEER, false);
+        // 复杂分支/关键逻辑:设置 cURL 连接和执行超时,并强制使用 IPv4,防止因微信接口卡顿或 DNS 解析慢拖垮 PHP-FPM 进程
+        $curl->setOption(CURLOPT_CONNECTTIMEOUT, 2); // 连接超时限制为 2 秒,避免网络握手长时间卡死
+        $curl->setOption(CURLOPT_TIMEOUT, 3);        // 总执行时间限制为 3 秒,避免请求挂起时间过长
+        $curl->setOption(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); // 强制 IPv4 解析,防止 IPv6 解析超时重试
         $result = $curl->get($url);
         $arr = Json::decode($result);
         $sessionKey = isset($arr['session_key']) ? $arr['session_key'] : '';
@@ -720,8 +730,6 @@ class AuthController extends PublicController
             //账号冻结不再自动登录
             util::success(['token' => '', 'currentMiniOpenId' => $openid, 'sn' => 6]);
         }
-        $shopAdmin->lastLogin = date("Y-m-d H:i:s");
-        $shopAdmin->save();
         $shopAdminId = $shopAdmin->id ?? 0;
 
         //是否有切换门店的权限