shish пре 1 месец
родитељ
комит
d7b7b7f30c
1 измењених фајлова са 11 додато и 1 уклоњено
  1. 11 1
      app-mall/controllers/AuthController.php

+ 11 - 1
app-mall/controllers/AuthController.php

@@ -127,7 +127,13 @@ class AuthController extends PublicController
         $this->redirect($url);
     }
 
-    //静默获取小程序用户信息
+    /**
+     * 静默获取小程序用户信息
+     * 职责:通过微信小程序 code 换取 openid 和 session_key 并自动登录商城端
+     * 入参:GET 传参 code (微信临时登录凭证)
+     * 返回:登录成功返回 token、用户信息等;失败返回错误提示
+     * 副作用:会将 session_key 写入 Redis 缓存
+     */
     public function actionMiniInfo()
     {
         $code = Yii::$app->request->get('code', '');
@@ -143,6 +149,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'] : '';