核心流程
- 微信服務器將用戶消息 POST 到配置的 URL(XML 格式)。
- PHP 解析 XML,提取
FromUserName、Content、MsgType 等字段。
- 連接 MySQL,使用預處理語句插入數據,防止 SQL 注入。
- 返回「success」或空字符串確認接收。
關鍵代碼
$postStr = file_get_contents("php://input");
$xml = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$openid = $xml->FromUserName;
$content = $xml->Content;
$pdo = new PDO("mysql:host=localhost;dbname=wechat;charset=utf8", "user", "pass");
$stmt = $pdo->prepare("INSERT INTO msg_log (openid, content, create_time) VALUES (?, ?, NOW())");
$stmt->execute([$openid, $content]);
echo "success";
注意事項
- 啟用 PDO 錯誤模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- 表結構建議:
id (PK), openid (VARCHAR 64), content (TEXT), msg_type (VARCHAR 20), create_time (DATETIME)
- 生產環境需驗證簽名(
signature、timestamp、nonce),確保請求來自微信。
參考資料
PHP 訪問 MySQL 基礎教程