订阅号基础功能开发
发表时间:2026-9-9
发布人:葵宇科技
浏览次数:0
订阅号基础功能开发?
本章将介绍微信公众号订阅号的基础功能开发,包括消息接收与回复、用户管理、素材管理等核心功能。
消息管理?
微信公众号与用户的交互主要通过消息进行。当用户向公众号发送消息时,微信服务器会将消息转发到您配置的服务器URL。
接收消息?
微信服务器会以POST请求的形式将用户消息发送到您的服务器。消息格式为XML,主要包含以下类型:
- 文本消息
- 图片消息
- 语音消息
- 视频消息
- 小视频消息
- 地理位置消息
- 链接消息
以文本消息为例,XML格式如下:
xml
<xml> <ToUserName><![CDATA[公众号原始ID]]></ToUserName> <FromUserName><![CDATA[用户OpenID]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[用户发送的文本内容]]></Content> <MsgId>1234567890123456</MsgId> </xml>回复消息?
收到用户消息后,您需要在5秒内做出响应,否则微信服务器会认为您的服务不可用。回复消息同样采用XML格式,支持以下类型:
- 文本消息
- 图片消息
- 语音消息
- 视频消息
- 音乐消息
- 图文消息
以文本消息回复为例:
xml
<xml> <ToUserName><![CDATA[用户OpenID]]></ToUserName> <FromUserName><![CDATA[公众号原始ID]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[回复的文本内容]]></Content> </xml>注意
- 回复消息时,ToUserName和FromUserName要与接收到的消息相反
- CreateTime为Unix时间戳(秒)
- 超过5秒未回复,可以使用客服消息接口主动发送消息
示例代码(PHP)?
php
<?php // 接收微信服务器发来的消息 $postStr = file_get_contents('php://input'); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $msgType = $postObj->MsgType; $time = time(); // 根据消息类型处理 if ($msgType == 'text') { $content = trim($postObj->Content); // 简单的关键词回复 if ($content == '你好') { $replyContent = '您好!欢迎关注我们的公众号!'; } else { $replyContent = '您发送的是文本消息:' . $content; } $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $replyContent); echo $resultStr; } elseif ($msgType == 'image') { // 处理图片消息 $mediaId = $postObj->MediaId; $imageTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[image]]></MsgType> <Image> <MediaId><![CDATA[%s]]></MediaId> </Image> </xml>"; $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $mediaId); echo $resultStr; } else { // 其他类型消息,回复默认文本 $replyContent = '感谢您的关注!'; $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $replyContent); echo $resultStr; }示例代码(Node.js)?
javascript
const express = require('express'); const xml2js = require('xml2js'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.text({ type: 'text/xml' })); app.post('/wechat', async (req, res) => { try { // 解析XML消息 const result = await xml2js.parseStringPromise(req.body, { explicitArray: false }); const message = result.xml; const fromUsername = message.FromUserName; const toUsername = message.ToUserName; const msgType = message.MsgType; const time = Math.floor(Date.now() / 1000); let replyMessage; // 根据消息类型处理 if (msgType 







