微信公众号开发 同时回复用户多条信息(包括图片、文字等)

小编 2026-06-04 阅读:1792 评论:0
我们在关注微信公众号、点击菜单、回复关键词或者执行程序中的某些事件(比如,订单提交成功等。)的时候,可以看到,有些公众号同时给我们回复了两条或两条以上的消息内容。 内容形式不限于文字,可能是这些消息类型:...

我们在关注微信公众号、点击菜单、回复关键词或者执行程序中的某些事件(比如,订单提交成功等。)的时候,可以看到,有些公众号同时给我们回复了两条或两条以上的消息内容。

内容形式不限于文字,可能是这些消息类型:文本为text,图片为image,语音为voice,视频消息为video,音乐消息为music,图文消息(点击跳转到外链)为news,图文消息(点击跳转到图文消息页面)为mpnews,卡券为wxcard,小程序为miniprogrampage

如果给用户发送的的图片/语音/视频等媒体文件时,需要通过素材管理接口,先上传媒体文件,获取media_id

先看看效果:
\"\"

下面以ecshop的微信通为例来进行讲解(其它程序也类似):
这里以$keyword == \'debug\' 即回复关键字”debug“为例(如果需要在用户关注公众号时回复多条,可以在 $keyword == \'subscribe\' 条件中处理),来回复用户 文本+ 图片+ 文本

打开站点根目录下的wechat/callback-ent.php文件,搜索if ($keyword == \'debug\')(如果该条件下有内容,先删除),因为需要回复的消息中有一条是图片,这里我们先通过客户接口上传需要的图片到微信公众号的素材库中(假设服务器根目录下images/qrcode/shop.png图片已经存在):

上传图片到微信公众号的素材管理库并回复用户该图片:

//从数据库 获取access_token
$ret = $db->getRow(\"SELECT `access_token` FROM \". $GLOBALS[\'ecs\']->table(\'weixin_config\'));
$access_token = $ret[\'access_token\'];


//通过 上传素材接口 获取media_id(如果已经上传并知道media_id,这段不需要,直接在下面需要media_id的地方写上值即可)
$file_path = dirname(dirname(__FILE__)).\"/images/qrcode/shop.png\";//图片在本地服务器上的路径
$file_data = array(\'media\'  => \'@\'.$file_path);
if(strlen($access_token) >= 64)
{
    $imgurl = \"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=\".$access_token.\"&type=image\";
    $imgres_json =$this -> https_request($imgurl, $file_data);
    $imgjson = json_decode($imgres_json);
}
$media_id = $imgjson->media_id;


//回复用户图片
$imgmsgType = \"image\";
$imgresultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $imgmsgType, $media_id);
echo $imgresultStr;
exit;

//回复用户文本消息示例
/*$msgType = \"text\";
$contentStr = $media_id.\"——\".$access_token.\"——\".$fromUsername;
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
exit;*/


上面的代码主要演示通过素材上传接口上传图片并获取其media_id,然后回复用户该图片,为了实现回复用户两条或两条以上的消息,下面我们使用客服接口:

为了讲解方便,我们还在if ($keyword == \'debug\')条件中写,记下上面得到的media_id值(可以通过回复文本的形式输出查看media_id的值),然后把上面的代码换成下面这样:

//从数据库 获取access_token
$ret = $db->getRow(\"SELECT `access_token` FROM \". $GLOBALS[\'ecs\']->table(\'weixin_config\'));
$access_token = $ret[\'access_token\'];


//回复第一条 文本
$content1=\"点击菜单微商城或扫描下方二维码,即可进入商城随心购,更有惊喜等您发现!\";
$this->replymsg($fromUsername,$access_token,$content1);

//回复第二条 图片
$mediaid = \"Wa1Zo-yWRj-uGKRm-leGMVuYn3Sh3EcNehZPgJPcTR0\";
$this->replyimg($fromUsername,$access_token,$mediaid);

//回复第三条 文本
$content2=\"很高兴能收到您的消息,想了解更多资讯或如需帮助,请添加客服微信\";
$this->replymsg($fromUsername,$access_token,$content2);

exit;

在wechat/callback-ent.php文件中添加replymsg、replyimg、https_post函数:

private function replymsg($fromUsername,$access_token,$content){

    $data = \'{
        \"touser\":\"\'.$fromUsername.\'\",
        \"msgtype\":\"text\",
        \"text\":
        {
             \"content\":\"\'.$content.\'\"
        }
    }\';

    $url = \"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=\".$access_token;

    $result = $this->https_post($url,$data);
    $final = json_decode($result);
    return $final;
}

private function replyimg($fromUsername,$access_token,$media_id){

    $data = \'{
        \"touser\":\"\'.$fromUsername.\'\",
        \"msgtype\":\"image\",
        \"image\":
        {
             \"media_id\":\"\'.$media_id.\'\"
        }
    }\';

    $url = \"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=\".$access_token;

    $result = $this->https_post($url,$data);
    $final = json_decode($result);
    return $final;
}

private function https_post($url,$data)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    if (curl_errno($curl)) {
       return \'Errno\'.curl_error($curl);
    }
    curl_close($curl);
    return $result;
}

\"\"

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表