Browse Source

[智价云] 微信公众号关注回调

tangyuanwang 3 days ago
parent
commit
bb99b65aba

+ 8 - 5
app/Http/Controllers/Api/Login.php

@@ -220,11 +220,14 @@ class Login extends Api
 
 
 	/**
-	 * 小程序手机号授权				/api/login/wechat_phone
-	 * 
-	 * @param	string		$code		授权码
+	 * 小程序手机号授权
+	 * @author 唐远望
+	 * @version   1.0
+	 * @date      2026-03-10
+	 * @param string 	auth_code 授权code
+	 * @param string 	open_code 开放平台code
 	 * 
-	 * */
+	 */
 	public function wechat_phone(Request $Request,  EmployeeModel $EmployeeModel, EmployeeOpenidModel $EmployeeOpenidModel)
 	{
 		// 验证规则
@@ -233,7 +236,7 @@ class Login extends Api
 		// 接收数据
 		$auth_code	= request('auth_code', '');
 		$open_code    = $Request->input('open_code', '');
-		$appId = config('wechat.mini.app_id','');//小程序APPID
+		$appId = config('wechat.mini.app_id', ''); //小程序APPID
 		// 授权结果
 		$result									= OpenPlat::getUserPhone($auth_code, $appId);
 		// 如果所需字段不存在

+ 52 - 0
app/Http/Controllers/Api/Wechat/OfficialNotify.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Http\Controllers\Api\Wechat;
+
+use App\Http\Controllers\Controller;
+use App\Models\Api\Personnel\EmployeeOpenid as EmployeeOpenidModel;
+use App\Facades\Servers\Logs\Log;
+use App\Servers\Wechat\Official;
+
+
+class OfficialNotify extends Controller
+{
+
+    /**
+     * 公众号关注回调 - 自动绑定用户公众号OpenID
+     * @author 唐远望
+     * @version 1.0
+     * @date 2026-03-10
+     */
+    public function callback(EmployeeOpenidModel $EmployeeOpenidModel)
+    {
+        // 获取微信推送的原始数据
+        $xmlData = file_get_contents('php://input');
+        $xml = simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA);
+        $Official = new Official();
+        // 提取关键信息
+        $fromUsername = (string)$xml->FromUserName;  // 用户的公众号OpenID
+        $toUsername = (string)$xml->ToUserName;      // 公众号原始ID
+        $event = (string)$xml->Event;                 // 事件类型
+        $eventKey = (string)$xml->EventKey;           // 事件KEY值(扫码关注时会有)
+        // 记录日志,方便调试
+        Log::info('wechat_subscribe_info', '微信关注事件', ['FromUserName' => $fromUsername, 'ToUserName' => $toUsername, 'event' => $event, 'eventKey' => $eventKey]);
+        // 处理关注事件
+        if ($event == 'subscribe') {
+            // 尝试获取用户UnionID
+            $official_user_info = $Official->getApp()->user->get($fromUsername);
+            $unionid = isset($official_user_info['unionid']) ? $official_user_info['unionid'] : '';
+            if ($unionid) {
+                // 1. 有UnionID,直接绑定公众号OpenID
+                $user_open_data = $EmployeeOpenidModel->where(['unionid' => $unionid])->first();
+                if ($user_open_data) {
+                    $user_open_data->official_openid = $fromUsername;
+                    $user_open_data->save();
+                }
+            } else {
+                Log::info('wechat_subscribe_error', '获取UnionID失败', ['data' => $fromUsername, 'request_data' => $official_user_info]);
+            }
+        }
+        // 默认返回成功(微信要求必须返回)
+        return 'success';
+    }
+}

+ 3 - 0
routes/api.php

@@ -29,6 +29,9 @@ Route::any('login/mobile_code', [App\Http\Controllers\Api\Login::class,'mobile_c
 //微信手机号授权登录
 Route::any('login/wechat_phone', [App\Http\Controllers\Api\Login::class, 'wechat_phone']);
 
+//公众号订阅回调通知
+Route::any('wechat/official/callback', [App\Http\Controllers\Api\Wechat\OfficialNotify::class, 'callback']);
+
 // ------违规处理------
 // 低价挂网商品违规处理-列表
 Route::any('process/low_price_goods/list', [App\Http\Controllers\Api\Process\LowPriceGoods::class, 'list']);