微信公众号自动回复聊天机器人实现(PHP)

1、服务器配置

在“微信公众平台”上将“服务器配置”启用,填写“服务器地址”(即关注者输入消息后调用的回调接口,返回回复文本),“令牌”(在接口验证中要用到),

“消息加解密密钥”、加解密方式暂时设为明文模式,先简单入手。

2、配置接口

public function valid()
{$echoStr = $_GET["echostr"];if ($echoStr) {if ($this->checkSignature()) {echo $echoStr;exit;}}
}

当第一步启用的时候,必须先调用这个方法,收到"echostr"后再验证(checkSignature)是否是我们的微信公众号发来的,如果是则把"echostr"回传回去,这个时候第一步点击启用便会成功,否则启用会失败,这个可以用来测试我们这个接口是否写对了。只要第一步启用成功,那之后便不需要再进行验证了,只需直接拿到传过来的信息再进行分析处理。

其中checkSignature方法如下:

private function checkSignature()
{$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = "token";$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if ($tmpStr == $signature) {return true;} else {return false;}
}

其中$token值便是第一步中设置的token值,记得替换下。

3、处理逻辑

public function responseMsg()
{$xml_str = file_get_contents('php://input');if (empty($xml_str)) {die('');}if (!empty($xml_str)) {// 解析该xml字符串,利用simpleXMLlibxml_disable_entity_loader(true);//禁止xml实体解析,防止xml注入$request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA);//判断该消息的类型,通过元素MsgTypeswitch ($request_xml->MsgType) {case 'event'://判断具体的事件类型(关注、取消、点击)$event = $request_xml->Event;if ($event == 'subscribe') { // 关注事件$this->_doSubscribe($request_xml);} elseif ($event == 'CLICK') {//菜单点击事件
//                        $this->_doClick($request_xml);} elseif ($event == 'VIEW') {//连接跳转事件
//                        $this->_doView($request_xml);}break;case 'text'://文本消息$this->_doText($request_xml);break;case 'image'://图片消息
//                    $this->_doImage($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一张图片');break;case 'voice'://语音消息
//                    $this->_doVoice($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一段语音');break;case 'video'://视频消息
//                    $this->_doVideo($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一段视频');break;case 'shortvideo'://短视频消息
//                    $this->_doShortvideo($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一段短视频');break;case 'location'://位置消息
//                    $this->_doLocation($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一个位置信息');break;case 'link'://链接消息
//                    $this->_doLink($request_xml);$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, '这是一个链接');break;}}
}private $_msg_template = array('text' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>',//文本回复XML模板'image' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>',//图片回复XML模板'music' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music></xml>',//音乐模板'news' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>',// 新闻主体'news_item' => '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>',//某个新闻模板
);/*** 发送文本信息* @param  [type] $to      目标用户ID* @param  [type] $from    来源用户ID* @param  [type] $content 内容*/
private function _msgText($to, $from, $content)
{$response = sprintf($this->_msg_template['text'], $to, $from, time(), $content);die($response);
}//关注后做的事件
private function _doSubscribe($request_xml)
{//处理该关注事件,向用户发送关注信息$content = '你好, 我是帅丁丁';$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $content);
}private function _doText($request_xml)
{$content = $request_xml->Content;$url = 'http://www.tuling123.com/openapi/api?key=xxxxxxxxxxxxxxx&info='.$content;$response_content = json_decode($this->_request('get', $url, array(), false));$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content->text);
}//发送请求方法
/*** @param  string $method 'get'|'post' 请求的方式* @param  string $url URL* @param  array|json $data post请求需要发送的数据* @param  bool $ssl*/
public function _request($method='get',$url,$data=array(),$ssl=true){//curl完成,先开启curl模块//初始化一个curl资源$curl = curl_init();//设置curl选项curl_setopt($curl,CURLOPT_URL,$url);//url//请求的代理信息$user_agent = isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';curl_setopt($curl,CURLOPT_USERAGENT,$user_agent);//referer头,请求来源curl_setopt($curl,CURLOPT_AUTOREFERER,true);curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间//SSL相关if($ssl){//禁用后,curl将终止从服务端进行验证;curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);//检查服务器SSL证书是否存在一个公用名curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);}//判断请求方式post还是getif(strtolower($method)=='post') {/**************处理post相关选项******************///是否为post请求 ,处理请求数据curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$data);}//是否处理响应头curl_setopt($curl,CURLOPT_HEADER,false);//是否返回响应结果curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//发出请求$response = curl_exec($curl);if (false === $response) {echo '<br>', curl_error($curl), '<br>';return false;}//关闭curlcurl_close($curl);return $response;
}

其中为了实现自动回复的功能,我采用了图灵机器人的api去实现,大家也可以基于自己的喜好采用第三方或者自己实现,代码借鉴了网上大神的作品,但是做了些修改,注释也很清晰,也就没必要仔细描述了。

4、调用

只要发来消息,直接调用responseMsg()方法即可,这样便实现了一个自动回复的聊天机器人功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10283.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信机器人 wechaty 针对个人微信对接chatterbot +django+drf 实现 自动回复 接入自己api接口

之前发表过chatterbot 的自定义api本人的流程 但是有粉丝或游客私信我 怎样对接自己个人微信 现在统一回复下 自己的心得流程 实现等 在写代码之前我先表述下 之前个人微信接口 使用itchat 等 在使用这类的前提是可以 登录网页版微信 网页版微信登录链接 itchat原理就是一种爬…

i排版html居中,i排版-i排版官网:微信公众号文章编辑软件-禾坡网

i排版是一款排版效率高、界面简洁、样式原创 ipaiban i排版功能介绍 1、格式清除与一键排版 “i排版”可以进行全文编辑&#xff0c;整篇文档复制进编辑器后&#xff0c;需先用橡皮擦清除格式&#xff0c;后点击一键排版(默认首行不缩进&#xff0c;照片居中显示哦&#xff5e;…

分享微信怎么做公众号报名系统_微信公众号报名链接怎么做

我们现在介绍的是利用开发好的第三方&#xff0c;可以在几分钟内创建出自己的微信公众号报名系统&#xff0c;链接到自己的公众号菜单上&#xff0c;让别人通过点击公众号菜单&#xff0c;在弹出的页面上直接填写信息进行报名&#xff0c;报名信息会自动汇总到后台的表格&#…

微信文章编辑的html在哪里,微信公众号的文章编辑界面在哪里?怎么编辑排版? | 微信公众号指南...

今天给大家介绍公众号文章编辑页面在哪里&#xff0c;怎么编辑排版&#xff0c;怎么推送文章。 申请了微信公众号后怎么发布文章&#xff1f;公众号的文章编辑页面在哪里?部分刚接触公众号运营的小伙伴是不太了解公众号后台功能的&#xff0c;今天就给大家介绍公众号文章编辑页…

【微信】公众号:免费注册个人公众号 公众号设置手册

目录 一、前言 二、普通订阅号&#xff08;个人注册&#xff09; 三、普通订阅号&#xff08;公众号设置&#xff09; 1、登录微信公众平台 2、【公众号设置】账号详情 &#xff08;1&#xff09;公开信息&#xff1a;修改个人微信公众号头像 &#xff08;2&#xff09;…

小编必看,教你如何使用微信公众号编辑器快速排版精美文章

对于小编而言&#xff0c;写作就是每天的日常&#xff0c;图文排版是公众号的形象,也是新媒体运营小编必须掌握的技能。一篇文章除了内容优质之外&#xff0c;排版也是非常重要的&#xff0c;好的排版才能让读者有更好的阅读体验。俗话说&#xff0c;工欲善其事&#xff0c;必先…

微信公众号的代码块插入,及一键排版

微信公众号&#xff1a;颜家大少 本文所用排版工具&#xff1a;http://md.aclickall.com . 微信公众号的排版问题 前段时间&#xff0c;准备在微信公众号上写文章时&#xff0c;却发现公众号居然连个最基本的插入代码块的功能都没有。 很纳闷&#xff0c;难道微信的开发者不用写…

注册公众号(企业类型的订阅号)参考步骤

注册企业类型的订阅号(公众号)所需的资料&#xff08;仅供参考&#xff09; 1. 一个未被微信公众号平台、微信开放平台、个人微信绑定的邮箱、邮箱密码 2. 企业信息&#xff1a;企业名称、企业营业执照注册号/统一社会信用代码 3. 公众号管理员姓名、手机号码、身份证号码 …

关于微信公众号文章编辑器不能直接编辑html样式的处理方法

1、微信的后台是不支持html编辑的&#xff1b;你可以先在其他的编辑器里面编辑好了以后&#xff0c;复制到微信编辑器里面&#xff1b;这样既可以保持原来的格式&#xff0c;还可以自由设置自己的喜欢的格式。 比如我有一大大大大大大大大大大大段话&#xff0c;不想让他在页面…

微信公众号发布svg排版文章

svg代码&#xff1a; 页面初加载只显示一张图片&#xff0c;点击后自动展开显示一张长图页面初加载只显示一张图片&#xff0c;点击后自动展开显示一张长图页面初加载只显示一张图片&#xff0c;点击后自动展开显示一张长图 <!DOCTYPE html> <html lang"en&quo…

微信公众号推文(编辑+排版教程)

目录 一、登录公众号二、打开秀米网站&#xff08;最好用谷歌浏览器&#xff09;1、新建图文2、大标题字号16、小标题字号14 加粗3、段落文字首行缩进、字间距2、行间距1.8、页边距104、重点句子加粗、换颜色5、结尾前添加分割线&#xff0c;分割线前后加空格6、添加二维码7、完…

免费chatGTP-3.5 后续接口持续开发中

网址&#xff1a;www.wanwu.chat 邀请码&#xff1a;vn1F 输入邀请码后可以免费获得20次使用次数&#xff01;&#xff01;&#xff01;&#xff01; 后续不定期赠送礼包码&#xff0c;免费赠送使用次数&#xff01;&#xff01;&#xff01; 次数有限&#xff0c;先到…

如何用 ChatGPT 一句话生成 Web 应用?

原型系统的开发对很多不会编程的人来说&#xff0c;原本确实是一道门槛&#xff0c;而且看似难以逾越。而现在&#xff0c;障碍突然间就消失了。 插件 ChatGPT 现在有了一个内容比较丰富的插件系统&#xff0c;而且 Plus 用户已经不再需要填表申请后漫长等待&#xff0c;直接就…

chatGPT对于一个python初学者有什么用?

目录 一、前言二、开始请教三、总结 一、前言 我最近开始学习python&#xff0c;感觉python整体语法啥的还是很好学的&#xff0c;但是正是由于太简单&#xff0c;且我还有多年的java编程基础&#xff0c;便很难沉下心去学习。想到之前看到的一段话&#xff1a;人性总是趋利避…

用二十段话介绍下ChatGPT

用二十段话介绍下ChatGPT-3.5 ChatGPT是一个基于GPT-3.5架构的大型语言模型。它由OpenAI开发&#xff0c;是一种强大的自然语言处理工具。ChatGPT可以理解和生成人类语言&#xff0c;可以应用于许多不同的领域。它可以帮助人们进行自然语言的翻译、摘要、问答等任务。ChatGPT拥…

用好ChatGPT,毕业直接走上人生巅峰

毕业论文交上去了&#xff0c;学分也攒齐了。考研没上岸的准毕业生们接下来要面对的不是惨烈的秋招&#xff0c;就是蹲家准备二战。生活终于要对各位小可爱们动手啦&#xff01; 不想默默承受社会的毒打&#xff1f; 不愿在屡战屡败屡败屡战的压力下秃头&#xff1f; 想必各位…

【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 阿里版 ChatGPT 突然官宣 ​ ChatGPT 技术在 AI 领域的重要性 自然语言生成 上下文连续性 多语言支持 ChatGPT 未来可能的应用场景 社交领域 商业领域 ​编辑 医疗领域…

中国互联网已经渐渐变成创新荒漠

最近在chatGPT高调宣布以后&#xff0c;我思索半天发现近几年&#xff0c;国内互联网已经再没有眼前一亮的创新&#xff0c;难道国内真变成只会抄作业的坏学生了&#xff0c;我觉得造成这样的状况&#xff0c;可能是由多方面因素造成的&#xff0c;主要有以下几点原因&#xff…

“署名ChatGPT”:人类正经历第一次AI著作权冲击

1971年&#xff0c;美国南加利福尼亚大学法律哲学教授克里斯托弗斯通&#xff0c;发表了一篇名为《树木拥有法律地位吗&#xff1f;》的文章。 这篇文章中明确表示&#xff0c;自然物的权利应该由它们的代理人来实施。一般来说&#xff0c;要由人或者组织、法人、政府来代表自然…

chatgpt赋能Python-python_ps图片

Python PS图片的SEO指南 Python在数字图像处理中广泛应用。其中&#xff0c;Photoshop文件&#xff08;psd&#xff09;是一种常见的图像文件格式。但是&#xff0c;如何在搜索引擎上优化Python PS图片并提高其排名仍然是一个挑战。 什么是Python PS图片&#xff1f; Python…