微信公众平台开发(十二) 发送客服消息
当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。
官方文档中只提供了一个发送客服消息的接口,开发者只要POST一个特定的JSON数据包即可实现消息回复。在这里,我们打算做成一个简单的平台,可以记录用户消息,并且用网页表格的形式显示出来,然后可以对消息进行回复操作。
首先,我们使用数据库记录用户主动发送过来的消息,然后再提取出来展示到页面,针对该消息,进行回复。这里我们只讨论文本消息,关于其他类型的消息,大家自行研究。
3.1 创建数据表
创建一张数据表tbl_customer 来记录用户消息。
<span -- --</span><span 表的结构 `tbl_customer`</span><span -- </span> <span CREATE</span> <span TABLE</span><span `tbl_customer` ( `id` </span><span bigint</span>(<span 20</span>) unsigned <span NOT</span> <span NULL</span> AUTO_INCREMENT COMMENT <span '</span><span //消息ID</span><span '</span><span , `from_user` </span><span char</span>(<span 50</span>) <span NOT</span> <span NULL</span> COMMENT <span '</span><span //消息发送者</span><span '</span><span , `message` </span><span varchar</span>(<span 200</span>) <span NOT</span> <span NULL</span> COMMENT <span '</span><span //消息体</span><span '</span><span , `time_stamp` </span><span datetime</span> <span NOT</span> <span NULL</span> COMMENT <span '</span><span //消息发送时间</span><span '</span><span , </span><span PRIMARY</span> <span KEY</span><span (`id`), </span><span KEY</span><span `from_user` (`from_user`) ) ENGINE</span><span =</span>MyISAM <span DEFAULT</span> CHARSET<span =</span>utf8 ;
3.2 创建sql.func.php 文件
创建 _query($_sql) {} 函数,来执行INSERT 操作。
<span function</span> _query(<span $_sql</span><span ){ </span><span if</span>(!<span $_result</span> = <span mysql_query</span>(<span $_sql</span><span )){ </span><span exit</span>('SQL执行失败'.<span mysql_error</span><span ()); } </span><span return</span> <span $_result</span><span ; }</span>
<span //</span><span 引入数据库处理函数</span> <span require_once</span> 'sql.func.php'<span ; </span><span function</span> _record_message(<span $fromusername</span>,<span $keyword</span>,<span $date_stamp</span><span ){ </span><span //</span><span 调用_query()函数</span> _query("INSERT INTO tbl_customer(from_user,message,time_stamp) VALUES('<span $fromusername</span>','<span $keyword</span>','<span $date_stamp</span>')"<span ); }</span>
3.4 处理并记录文本消息
A. 引入回复文本的函数文件,引入记录消息的函数文件
<span //</span><span 引入回复文本的函数文件</span> <span require_once</span> 'responseText.func.inc.php'<span ; </span><span //</span><span 引入记录消息的函数文件</span> <span require_once</span> 'record_message.func.inc.php';
B. 记录消息入数据库,并返回给用户刚才发送的消息,在这里,你可以修改成其他的文本,比如:“你好,消息已收到,我们会尽快回复您!” 等等。
<span //</span><span 处理文本消息函数</span> <span public</span> <span function</span> handleText(<span $postObj</span><span ) { </span><span //</span><span 获取消息发送者,消息体,时间戳</span> <span $fromusername</span> = <span $postObj</span>-><span FromUserName; </span><span $keyword</span> = <span trim</span>(<span $postObj</span>-><span Content); </span><span $date_stamp</span> = <span date</span>('Y-m-d H:i:s'<span ); </span><span if</span>(!<span empty</span>( <span $keyword</span><span )) { </span><span //</span><span 调用_record_message()函数,记录消息入数据库</span> _record_message(<span $fromusername</span>,<span $keyword</span>,<span $date_stamp</span><span ); </span><span $contentStr</span> = <span $keyword</span><span ; </span><span //</span><span 调用_response_text()函数,回复发送者消息</span> <span $resultStr</span> = _response_text(<span $postObj</span>,<span $contentStr</span><span ); </span><span echo</span> <span $resultStr</span><span ; }</span><span else</span><span { </span><span echo</span> "Input something..."<span ; } }</span>
我们的最终效果大概如下所示,主要的工作在“信息管理中心”这块,其他的页面布局等等,不在这里赘述了,只讲解消息展示这块。
4.1 具体实施
引入数据库操作文件,执行分页模块,执行数据库查询,将查询出来的结果赋给$_result 供下面使用。
<span //</span><span 引入数据库操作文件</span> <span require_once</span> 'includes/sql.func.php'<span ; </span><span //</span><span 分页模块</span> <span global</span> <span $_pagesize</span>,<span $_pagenum</span><span ; _page(</span>"SELECT id FROM tbl_customer",15); <span //</span><span 第一个参数获取总条数,第二个参数,指定每页多少条</span> <span $_result</span> = _query("SELECT * FROM tbl_customer ORDER BY id DESC LIMIT <span $_pagenum</span>,<span $_pagesize</span>");
将$_result 遍历出来,依次插入表格中。
<span <</span><span form</span><span ></span> <span <</span><span table </span><span cellspacing</span><span ="1"</span><span ></span> <span <</span><span tr</span><span ><</span><span th</span><span ></span>消息ID<span </</span><span th</span><span ><</span><span th</span><span ></span>发送者<span </</span><span th</span><span ><</span><span th</span><span ></span>消息体<span </</span><span th</span><span ><</span><span th</span><span ></span>消息时间<span </</span><span th</span><span ><</span><span th</span><span ></span>操作<span </</span><span th</span><span ></</span><span tr</span><span ></span> <span <?</span><span php while(!!$_rows = _fetch_array_list($_result)){ $_html = array(); $_html['id'] = $_rows['id']; $_html['from_user'] = $_rows['from_user']; $_html['message'] = $_rows['message']; $_html['time_stamp'] = $_rows['time_stamp']; </span><span ?></span> <span <</span><span tr</span><span ><</span><span td</span><span ></span><span <?</span><span php echo $_html['id']</span><span ?></span><span </</span><span td</span><span ><</span><span td</span><span ></span><span <?</span><span php echo $_html['from_user']</span><span ?></span><span </</span><span td</span><span ><</span><span td</span><span ></span><span <?</span><span php echo $_html['message']</span><span ?></span><span </</span><span td</span><span ><</span><span td</span><span ></span><span <?</span><span php echo $_html['time_stamp']</span><span ?></span><span </</span><span td</span><span ><</span><span td</span><span ><</span><span a </span><span href</span><span ="reply.php?fromusername=<?php echo $_html['from_user']?>&message=<?php echo $_html['message']?>"</span><span ><</span><span input </span><span type</span><span ="button"</span><span value</span><span ="回复"</span> <span /></</span><span a</span><span ></</span><span td</span><span ></</span><span tr</span><span ></span> <span <?</span><span php } _free_result($_result); </span><span ?></span> <span </</span><span table</span><span ></span> <span </</span><span form</span><span ></span>
说明:在每条消息后,都有一个“回复”操作,点击该按钮,向reply.php文件中传入fromusername和用户发送的消息,为回复用户消息做准备。
5.1 创建客服消息回复函数文件customer.php
微信发送客服消息的接口URL如下:
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
需要POST的JSON数据包格式如下:
<span { "touser":"OPENID", "msgtype":"text", "text": { "content":"Hello World" } }</span>
所以,根据上面的提示,我们编写处理函数 _reply_customer($touser,$content),调用的时候,传入touser和需要回复的content,即可发送客服消息。
<span function</span> _reply_customer(<span $touser</span>,<span $content</span><span ){ </span><span //</span><span 更换成自己的APPID和APPSECRET</span> <span $APPID</span>="wxef78f22f877db4c2"<span ; </span><span $APPSECRET</span>="3f3aa6ea961b6284057b8170d50e2048"<span ; </span><span $TOKEN_URL</span>="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".<span $APPID</span>."&secret=".<span $APPSECRET</span><span ; </span><span $json</span>=<span file_get_contents</span>(<span $TOKEN_URL</span><span ); </span><span $result</span>=json_decode(<span $json</span><span ); </span><span $ACC_TOKEN</span>=<span $result</span>-><span access_token; </span><span $data</span> = '<span { "touser":"</span>'.<span $touser</span>.'<span ", "msgtype":"text", "text": { "content":"</span>'.<span $content</span>.'<span " } }</span>'<span ; </span><span $url</span> = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".<span $ACC_TOKEN</span><span ; </span><span $result</span> = https_post(<span $url</span>,<span $data</span><span ); </span><span $final</span> = json_decode(<span $result</span><span ); </span><span return</span> <span $final</span><span ; } </span><span function</span> https_post(<span $url</span>,<span $data</span><span ) { </span><span $curl</span> =<span curl_init(); curl_setopt(</span><span $curl</span>, CURLOPT_URL, <span $url</span><span ); curl_setopt(</span><span $curl</span>, CURLOPT_SSL_VERIFYPEER, <span FALSE</span><span ); curl_setopt(</span><span $curl</span>, CURLOPT_SSL_VERIFYHOST, <span FALSE</span><span ); curl_setopt(</span><span $curl</span>, CURLOPT_POST, 1<span ); curl_setopt(</span><span $curl</span>, CURLOPT_POSTFIELDS, <span $data</span><span ); curl_setopt(</span><span $curl</span>, CURLOPT_RETURNTRANSFER, 1<span ); </span><span $result</span> = curl_exec(<span $curl</span><span ); </span><span if</span> (curl_errno(<span $curl</span><span )) { </span><span return</span> 'Errno'.curl_error(<span $curl</span><span ); } curl_close(</span><span $curl</span><span ); </span><span return</span> <span $result</span><span ; }</span>
下面,我们就将上面写好的函数引入到消息回复页面,实现发送客服消息的功能。
5.2 点击“回复”按钮,带上fromusername和message参数跳转到reply.php。
5.3 reply.php 页面显示
5.4 reply.php文件分析
<span //</span><span 引入回复消息的函数文件</span> <span require_once</span> '../customer.php';
form表单提交到relpy.php本身,带有action=relpy.
<span <</span><span form </span><span method</span><span ="post"</span><span action</span><span ="reply.php?action=reply"</span><span ></span> <span <</span><span dl</span><span ></span> <span <</span><span dd</span><span ><</span><span strong</span><span ></span>收件人:<span </</span><span strong</span><span ><</span><span input </span><span type</span><span ="text"</span><span name</span><span ="tousername"</span><span class</span><span ="text"</span><span value</span><span ="<?php echo $from_username?>"</span> <span /></</span><span dd</span><span ></span> <span <</span><span dd</span><span ><</span><span strong</span><span ></span>原消息:<span </</span><span strong</span><span ><</span><span input </span><span type</span><span ="text"</span><span name</span><span ="message"</span><span class</span><span ="text"</span><span value</span><span ="<?php echo $message?>"</span> <span /></</span><span dd</span><span ></span> <span <</span><span dd</span><span ><</span><span span</span><span ><</span><span strong</span><span ></span>内 容:<span </</span><span strong</span><span ></</span><span span</span><span ><</span><span textarea </span><span rows</span><span ="5"</span><span cols</span><span ="34"</span><span name</span><span ="content"</span><span ></</span><span textarea</span><span ></</span><span dd</span><span ></span> <span <</span><span dd</span><span ><</span><span input </span><span type</span><span ="submit"</span><span class</span><span ="submit"</span><span value</span><span ="回复消息"</span> <span /></</span><span dd</span><span ></span> <span </</span><span dl</span><span ></span> <span </</span><span form</span><span ></span>
action=reply 动作处理。
<span if</span>(<span $_GET</span>['action'] == "reply"<span ){ </span><span $touser</span> = <span $_POST</span>['tousername'<span ]; </span><span $content</span> = <span $_POST</span>['content'<span ]; </span><span $result</span> = _reply_customer(<span $touser</span>, <span $content</span><span ); </span><span if</span>(<span $result</span>->errcode == "0"<span ){ _location(</span>'消息回复成功!', 'index.php'<span ); } }</span>
说明:POST方式获取touser, content,然后调用_reply_customer($touser, $content)方法处理,处理成功,则弹出“消息回复成功!”,然后跳转到index.php页面,完成发送客服消息过程。
6.1 微信用户发送消息
6.2 平台消息管理
6.3 发送客服消息
再次发送客服消息
发送客服消息测试成功!
http://files.cnblogs.com/mchina/customer.rar
微信发送客服消息本身很简单,只需POST一个JSON数据包到指定接口URL即可。这里我们进行了扩展,写成一个简单的平台,方便企业的管理。还有很多需要补充和改进的地方,例如,记录客服发送的消息;将相同用户的消息记录成一个集合;实现其他格式的消息回复等,有待读者自行思考开发。
David Camp
- 业务合作,请联系作者QQ:562866602
- 我的微信号:mchina_tang
- 给我写信:mchina_tang@qq.com
我们永远相信,分享是一种美德 | We Believe, Great People Share Knowledge...

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Vue.js와 ASP.NET의 결합은 웹 애플리케이션의 성능 최적화와 확장을 위한 팁과 제안을 제공합니다. 웹 애플리케이션의 급속한 발전으로 인해 성능 최적화는 개발자에게 필수적이고 중요한 작업이 되었습니다. 인기 있는 프런트 엔드 프레임워크인 Vue.js를 ASP.NET과 결합하면 더 나은 성능 최적화 및 확장을 달성하는 데 도움이 될 수 있습니다. 이 문서에서는 몇 가지 팁과 제안 사항을 소개하고 몇 가지 코드 예제를 제공합니다. 1. HTTP 요청 감소 HTTP 요청 수는 웹 애플리케이션의 로딩 속도에 직접적인 영향을 미칩니다. 통과하다

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법은 무엇입니까? 소개: MySQL은 고성능, 안정성 및 사용 용이성을 특징으로 널리 사용되는 데이터베이스 관리 시스템입니다. ASP.NET 개발에서는 데이터 저장을 위해 MySQL 데이터베이스를 사용하는 것이 일반적인 요구 사항입니다. 데이터베이스 연결의 효율성과 성능을 향상시키기 위해서는 MySQL 연결 풀을 올바르게 사용하고 최적화해야 합니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법을 소개합니다.

번역기 | 검토자: Chen Jun | Chonglou 1990년대에 사람들이 소프트웨어 프로그래밍을 언급할 때 이는 일반적으로 편집기를 선택하고 코드를 CVS 또는 SVN 코드 베이스로 확인한 다음 코드를 실행 파일로 컴파일하는 것을 의미했습니다. Eclipse 및 Visual Studio와 같은 해당 통합 개발 환경(IDE)은 프로그래밍, 개발, 문서화, 구성, 테스트, 배포 및 기타 단계를 완전한 소프트웨어 개발 수명 주기(SDLC)에 통합하여 개발자의 작업 효율성을 향상시킬 수 있습니다. 최근 몇 년 동안 널리 사용되는 클라우드 컴퓨팅 및 DevSecOps 자동화 도구는 개발자의 포괄적인 역량을 향상시켜 더 많은 기업이 소프트웨어 애플리케이션을 보다 쉽게 개발, 배포 및 유지 관리할 수 있게 되었습니다. 오늘날 생성적 AI는 차세대 개발입니다.

ASP.NET 프로그램에서 MySQL에 다시 연결하는 방법은 무엇입니까? ASP.NET 개발에서는 MySQL 데이터베이스를 사용하는 것이 매우 일반적입니다. 그러나 네트워크나 데이터베이스 서버 문제로 인해 데이터베이스 연결이 중단되거나 타임아웃되는 경우가 있습니다. 이 경우, 프로그램의 안정성과 신뢰성을 보장하기 위해 연결이 끊어진 후 연결을 다시 설정해야 합니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결을 다시 연결하는 방법을 소개합니다. 필요한 네임스페이스를 먼저 참조하려면 코드 파일의 헤드에서 참조하세요.

Vue.js와 ASP.NET의 결합을 통해 엔터프라이즈급 애플리케이션의 개발 및 배포가 가능해졌습니다. 오늘날 빠르게 발전하는 인터넷 기술 분야에서 엔터프라이즈급 애플리케이션의 개발 및 배포가 점점 더 중요해지고 있습니다. Vue.js와 ASP.NET은 프런트엔드 및 백엔드 개발에 널리 사용되는 두 가지 기술을 결합하면 엔터프라이즈 수준 애플리케이션의 개발 및 배포에 많은 이점을 가져올 수 있습니다. 이 기사에서는 Vue.js 및 ASP.NET을 사용하여 코드 예제를 통해 엔터프라이즈 수준 애플리케이션을 개발하고 배포하는 방법을 소개합니다. 먼저, 설치해야 합니다.

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하는 방법은 무엇입니까? 인터넷의 발달과 데이터 양의 증가로 인해 데이터베이스 접속 및 연결에 대한 수요도 증가하고 있습니다. 데이터베이스의 성능과 안정성을 향상시키기 위해서는 커넥션 풀링(Connection Pooling)이 필수적인 기술이 되었습니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하여 데이터베이스의 효율성과 응답 속도를 향상시키는 방법을 주로 소개합니다. 1. 커넥션 풀링의 개념과 기능 커넥션 풀링은 데이터베이스 커넥션을 재사용하는 기술이다.

ASP.NET의 기본 제공 개체에는 "요청", "응답", "세션", "서버", "응용 프로그램", "HttpContext", "Cache", "Trace", "Cookie" 및 "Server.MapPath": 1. 클라이언트가 발행한 HTTP 요청을 나타내는 요청 2. 응답: 웹 서버가 클라이언트에 반환한 HTTP 응답을 나타냅니다. 클라이언트 등

Linux에서 ASP.NET 개발을 위해 Visual Studio를 사용하기 위한 권장 구성 개요: 오픈 소스 소프트웨어의 개발과 Linux 운영 체제의 인기로 인해 점점 더 많은 개발자가 Linux에서 ASP.NET을 개발하기 시작하고 있습니다. 강력한 개발 도구인 Visual Studio는 항상 Windows 플랫폼에서 지배적인 위치를 차지해 왔습니다. 이 문서에서는 Linux에서 ASP.NE용 VisualStudio를 구성하는 방법을 소개합니다.
