首页 php教程 php手册 微信公众平台开发(十二) 发送客服消息

微信公众平台开发(十二) 发送客服消息

Jun 13, 2016 am 09:35 AM
aspnet 软件编程

当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为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...

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Vue.js与ASP.NET的结合,实现Web应用的性能优化和扩展的技巧和建议 Vue.js与ASP.NET的结合,实现Web应用的性能优化和扩展的技巧和建议 Jul 29, 2023 pm 05:19 PM

Vue.js与ASP.NET的结合,实现Web应用的性能优化和扩展的技巧和建议随着Web应用的快速发展,性能优化成为开发者不可或缺的重要任务。Vue.js作为一款流行的前端框架,与ASP.NET的结合可以帮助我们实现更好的性能优化和扩展。本文将会介绍一些技巧和建议,并提供一些代码示例。一、减少HTTP请求HTTP请求的数量直接影响着Web应用的加载速度。通过

ASP.NET程序中的MySQL连接池使用及优化技巧 ASP.NET程序中的MySQL连接池使用及优化技巧 Jun 30, 2023 pm 11:54 PM

如何在ASP.NET程序中正确使用和优化MySQL连接池?引言:MySQL是一种广泛使用的数据库管理系统,它具有高性能、可靠性和易用性的特点。在ASP.NET开发中,使用MySQL数据库进行数据存储是常见的需求。为了提高数据库连接的效率和性能,我们需要正确地使用和优化MySQL连接池。本文将介绍在ASP.NET程序中如何正确使用和优化MySQL连接池的方法。

生成式AI将在十个方面改变软件开发 生成式AI将在十个方面改变软件开发 Mar 11, 2024 pm 12:10 PM

译者|陈峻审校|重楼上个世纪90年代,当人们提起软件编程时,通常意味着选择一个编辑器,将代码检入CVS或SVN代码库,然后将代码编译成可执行文件。与之对应的Eclipse和VisualStudio等集成开发环境(IDE)可以将编程、开发、文档、构建、测试、部署等步骤纳入到一个完整的软件开发生命周期(SDLC)中,从而提高了开发人员的工作效率。近年来,流行的云计算和DevSecOps自动化工具提升了开发者的综合能力,使得更多的企业能够更加轻松地开发、部署和维护软件应用。如今,生成式AI作为下一代开

如何在ASP.NET程序中重连MySQL连接? 如何在ASP.NET程序中重连MySQL连接? Jun 29, 2023 pm 02:21 PM

如何在ASP.NET程序中重连MySQL连接?在ASP.NET开发中,使用MySQL数据库是非常常见的。然而,由于网络或数据库服务器的原因,有时会导致数据库连接中断或超时。在这种情况下,为了保证程序的稳定性和可靠性,我们需要在连接断开后重新建立连接。本文将介绍如何在ASP.NET程序中实现重连MySQL连接的方法。引用必要的命名空间首先,在代码文件的头部引用

Vue.js与ASP.NET的结合,实现企业级应用的开发和部署 Vue.js与ASP.NET的结合,实现企业级应用的开发和部署 Jul 29, 2023 pm 02:37 PM

Vue.js与ASP.NET的结合,实现企业级应用的开发和部署在当今快速发展的互联网技术领域,企业级应用的开发和部署变得越来越重要。Vue.js和ASP.NET是两个在前端和后端开发中广泛使用的技术,将它们结合起来可以为企业级应用的开发和部署带来诸多优势。本文将通过代码示例介绍如何使用Vue.js和ASP.NET进行企业级应用的开发和部署。首先,我们需要安装

如何在ASP.NET程序中正确配置和使用MySQL连接池? 如何在ASP.NET程序中正确配置和使用MySQL连接池? Jun 29, 2023 pm 12:56 PM

如何在ASP.NET程序中正确配置和使用MySQL连接池?随着互联网的发展和数据量的增大,对数据库的访问和连接需求也在不断增加。为了提高数据库的性能和稳定性,连接池成为了一个必不可少的技术。本文主要介绍如何在ASP.NET程序中正确配置和使用MySQL连接池,以提高数据库的效率和响应速度。一、连接池的概念和作用连接池是一种重复使用数据库连接的技术,在程序初始

ASP.NET中使用和优化MySQL连接池的事务性能 ASP.NET中使用和优化MySQL连接池的事务性能 Jun 30, 2023 pm 12:12 PM

如何在ASP.NET程序中正确使用和优化MySQL连接池的事务性能?在ASP.NET程序中,数据库事务是非常重要的一部分。事务可以确保数据库的一致性和完整性,同时也可以提供更好的性能。而在使用MySQL数据库时,利用连接池来管理连接资源和优化性能是必不可少的。首先,让我们简单了解一下MySQL连接池的概念。连接池是一组连接的缓冲池,通过预先初始化一定数量的数

aspnet有哪些内置对象 aspnet有哪些内置对象 Nov 21, 2023 pm 02:59 PM

ASP.NET中的内置对象有“Request”、“Response”、“Session”、“Server”、“Application”、 “HttpContext”、“Cache”、“Trace”、“Cookie”和“Server.MapPath”:1、Request,表示客户端发出的HTTP请求;2、Response:表示Web服务器返回给客户端的HTTP响应等等。

See all articles