订阅号基础功能开发 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 公众号相关 >

订阅号基础功能开发

发表时间:2026-9-9

发布人:葵宇科技

浏览次数:0

 

订阅号基础功能开发?

本章将介绍微信公众号订阅号的基础功能开发,包括消息接收与回复、用户管理、素材管理等核心功能。

消息管理?

微信公众号与用户的交互主要通过消息进行。当用户向公众号发送消息时,微信服务器会将消息转发到您配置的服务器URL。

接收消息?

微信服务器会以POST请求的形式将用户消息发送到您的服务器。消息格式为XML,主要包含以下类型:

  1. 文本消息
  2. 图片消息
  3. 语音消息
  4. 视频消息
  5. 小视频消息
  6. 地理位置消息
  7. 链接消息

以文本消息为例,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格式,支持以下类型:

  1. 文本消息
  2. 图片消息
  3. 语音消息
  4. 视频消息
  5. 音乐消息
  6. 图文消息

以文本消息回复为例:

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