欢迎浏览乐竟·(中国)体育

乐竟·(中国)体育智能科技股份有限公司官网

11年专注提供磷化工原料批发

华南地区销量领前的三聚磷酸钠专业代理商

全国免费咨询热线:

400-123-4657

当前位置: 首页 > 新闻资讯

PHP实现微信小程序客服消息功能的方法及使用步骤

文章作者:小编 人气:发表时间:2026-03-22 04:34:41

微信小程序客服消息功能,看上去好似复杂无比,实际上却是每一个开发者都会碰到的刚需情况。有不少人在进行设置的时候,在 Token 验证这个步骤或者消息收发这个环节出现了卡顿现象,本文直接通过 PHP 代码带着你避开这些棘手的问题。

开启客服消息的隐藏细节

登录微信公众平台了,于“开发”菜单那儿寻得“开发设置”,往下拉至“消息推送”区域。这儿存在一个关键要点:好多人径直点“启动”便着手填信息,然而正确的顺序是先于服务器部署验证文件,而后回来提交配置。URL地址得采用HTTPS协议,并且80或者443端口必须能够正常访问,不然微信服务器没法回调你的接口。

参数Token虽说能够随意填写,不过其直接对后续全部通信安全产生影响,建议采用32位随机字符串,像是“d7f8g9h0j1k2l3z4x5c6v7b8n9m0”。消息加密密钥点击“随机生成”便可,加密方式选择“兼容模式”可同时兼顾安全性以及调试便利性。数据格式选择JSON,由于PHP处理JSON比XML更具高效性,并且代码量也更少。

PHP服务端验证Token逻辑

作为整套流程开端的服务端验证,微信会朝着你的URL发出GET请求,此请求会携带signature、timestamp、nonce以及echostr这四个参数。验证的关键部分是,先将token、timestamp、nonce这三个字段依据字典序进行排序然后拼接,紧接着做SHA1加密,之后查看结果是不是等于signature。要是两者相等,那就直接输出echostr来完成验证。

实际的代码当中,需要特别去留意两点,其一呢,token务必得和在公众平台所填写的完全保持一致,这里面涵盖了大小写的情况,其二,在验证通过之后,必须马上返回echostr,绝对不能有任何多余的输出。好多开发者在这一环节遭遇失败,原因在于代码里面多打印了空格或者换行符,导致微信服务器将其识别成验证未通过。

接收与解析用户消息

通过验证之后,微信针对用户所发之消息,即以 POST 方式将其辗转发送至你的 URL 处。该消息之体究属 JSON 格式模样,含有 ToUserName、FromUserName、CreateTime、MsgType、Content 等一系列字段呢。其中 MsgType 乃是用于区分消息具体类型的,而针对于文本消息来讲,于 Content 字段那儿贮藏着用户发出的那个具体的文字哦。

PHP接收消息之时,借助file_get_contents(‘php://input’)去获取原始POST数据,而后运用json_decode将其转换为对象。需要留意的是,此处不能够运用$_POST去获取,原因在于微信所采用的是application/json格式。当拿到消息之后,能够依据FromUserName去识别用户,依照Content去判断用户意图,以此为后续回复做好准备。

客服消息回复的核心机制

存在于回复里的消息类型,一部分是涉及被动回复的情况,另一部分是关于客服接口回复的情形。针对被动回复而言,当用户发送消息之后,在5秒的时间范围之内,你的服务器会直接向微信返回一段JSON,紧接着用户马上就会收到回复。采用这种方式所具备的优点是实时性表现良好,不过5秒的超时限制相对来说较为严格,它适用于简单情境下的应答场景。

$signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 $echostr=$_GET["echostr"];
 $token = TOKEN;//这里改成你第一步操作时填写的token
 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 if ($tmpStr == $signature ) {
 return $echostr;
 } else {
 return false;
 }

客服接口回复则允许在48小时内主动向用户推送消息,不受5秒限制。调用这个接口需要获取access_token,有效期7200秒,需要缓存避免频繁请求。接口地址是https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=,POST的数据包含touser(用户openid)和text(content内容)两个核心字段。

完整PHP代码结构示例

有一个完整的功能文件,它通常涵盖三个部分,首先存在Token验证的入口,借助$_GET[‘echostr’]来判定是不是首次配置,接着是消息接收与处理,依据MsgType分支去处理不一样的消息类型,最后是回复逻辑,运用curl库朝着微信客服接口发送请求。

在代码里头,得实施对getAccessToken函数做封装的操作,从缓存文件那儿去读取token,当token失效之际要重新去获取。针对curl这一部分,得将超时时间设定成为3秒的时长,如此这般可以设法去避开等待时间过长进而对用户体验造成影响的情况。所有的日志记录,都要写入专属于它的日志文件当中,这有利于方便去排查其所出现的问题,然而日志里面绝对不可以包含用户的敏感的信息。

小程序前端调用方式

面向前端调用的客服消息显得极为简洁明快,于有该需求处增添按钮,通过置设open-type=”contact”便可达成。要是打算于特定场景里自动触发客服会话,能够借助wx.openCustomerServiceConversation接口,将sessionFrom参数予以传入来传递用户当下页面的上下文信息。

 $postArr['FromUserName']];
$accessToken = $xcxmsg->getAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $accessToken;
switch ($postArr['MsgType']) {
 case "text":
 //如用户发送的是文字信息,这里处理
 //回复图文链接,也可以回复别的类型,根据需要
 $data['msgtype'] = "link";
 $data['link'] = [
  "title" => "hello",
  "description" => "Is Really A Happy Day",
  "url" => "LINK_URL",//连接url
  "thumb_url" =>"THUMB_URL" //图片url
 ];
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 case "image": //如用户发送图片消息,进入这里
 //服务端回复 图片,也可以回复别的类型,根据需要
 $data['msgtype'] = "image";
 $data['image'] = ['media_id' => 'media_id值']; // 执行 $xcxmsg->upload($accessToken)返回的 media_id
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 case "miniprogrampage":
 //如用户发送小程序卡片,进入这里
 //这里服务端回复小卡片,也可以回复别的类型,根据需要
 $data['msgtype'] = "miniprogrampage";
 $data['miniprogrampage'] = [
  "title" => "title",
  "pagepath" => "pages/index/index",
  "thumb_media_id" => "media_id值"];// 执行 $xcxmsg->upload($accessToken)返回的 media_id
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 case "event":
 //如用户进入会话事件
 //这里可以回复文本
 $data['msgtype'] = "text";
 $data['text'] = [
  "content" => "Hello World",
  ];
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 default:
}

值得留意的是,小程序唯有发布上线之后,客服消息功能才能够在生产环境里正常得以使用。在开发工具进行调试之际,可以于项目设置当中勾选“不校验合法域名”,然而在正式发布之前务必要将服务器域名增添到小程序的 request 合法域名列表之中。

观摩完此篇文章之后,你于实际配置PHP客服消息之际所遭遇的最为棘手的问题究竟是什么呢?在评论区分享你的踩坑经历欢迎,点赞数多的朋友能够私信获取完整版代码示例。