|
|
@@ -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'] : '';
|