请选择 进入手机版 | 继续访问电脑版
 找回密码
搜索
查看: 6358|回复: 4

微信公众平台机器人教程

  [复制链接]
  • TA的每日心情
    慵懒
    2017-8-13 09:40
  • 签到天数: 133 天

    连续签到: 1 天

    [LV.7]常住居民III

    1310

    主题

    1389

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    11731

    社区QQ达人

    发表于 2013-12-23 23:26:51 | 显示全部楼层 |阅读模式
    首先要去微信公众平台申请一个帐号
    http://mp.weixin.qq.com/

    申请一个SAE应用
    我的是http://weixintalk.sinaapp.com

    设置微信接口地址
    微信平台->设置->回复设置->自定义回复->调用公众平台消息接口>>
    url写这个url,token随便定一个"helloczq"

    开启SAE服务
    由于我们需要教机器人一些日常用语,所以我们必须要一个存储他们的空间,这里暂时使用SAE的kvdb服务,请先到sae开启。

    定义规则
    我们先给他定义一个简单的规则,比如
    求助是
    help
    教他学东西是
    "_" + 问题 + ":" + 回答
    比如:_hi:hello,就是回复hello给hi
    如果一样东西有很多人教他,机器人应该优先回复旧的东西。

    聊天代码
    规则定好了,我们先写一个聊天的类
    1. class talk {
    2. public function reply($str) {
    3. $kv = new SaeKV ();
    4. $kv->init (); //用户输入帮助语句,可以自定义帮助语法
    5. if ($str == 'help' || $str == '求助'){
    6. return "要教我读书,请英文下划线开头,接着问题,接着英文冒号,接着回答";
    7. } //下划线开头的教学模式
    8. if (substr($str, 0,1) == '_'){
    9. //教
    10. $pos = strpos($str, ':');
    11. if ($pos > -1){ //问题
    12. $q = substr($str, 1,$pos - 1); //答案
    13. $a = substr($str, $pos + 1);
    14. //加入知识库
    15. $ret = $kv->get('know_' . md5($q)); if ($ret === false || !is_array($ret))
    16. $ret = array();
    17. $ret[] = $a;
    18. $kv->set('know_' . md5($q), $ret);
    19. return "known::" . $q . '/' . $a ;
    20. }
    21. }
    22. $ret = $kv->get('know_' . md5($str));//查询数据库,寻找问题答案
    23. if ($ret === false || !is_array($ret) || count($ret) == 0){
    24. return '我什么都不知道,输入"help"求助';
    25. }else{
    26. //随机一个
    27. while(count($ret) > 1){
    28. $re = array_shift($ret);
    29. if (rand(0, 1) == 0)
    30. return $re;
    31. }
    32. return array_shift($ret);
    33. }
    34. }
    复制代码



    这个类会自动回复,教学,大家可以简单测试一下

    接入微信
    其实就是把上面那个类和官方的php代码拼起来...
    以下是全部代码,包括验证部分
    1. define ( "TOKEN", "helloczq" );
    2. $wechatObj = new wechat ();
    3. $wechatObj->valid ();
    4. $wechatObj->responseMsg ();
    5. class wechat {
    6. public function valid() {
    7. $echoStr = $_GET ["echostr"];
    8. if (! $this->checkSignature ())
    9. exit ();
    10. }
    11. public function responseMsg() {
    12. $postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];
    13. if (! empty ( $postStr )) {
    14. $postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
    15. $fromUsername = $postObj->FromUserName;
    16. $toUsername = $postObj->ToUserName;
    17. $content = trim ( $postObj->Content );
    18. $time = time ();
    19. $talk = new talk();
    20. $textTpl = "


    21. %s


    22. 0
    23. ";
    24. $msgType = "text";
    25. $contentStr = $talk->reply($content);
    26. $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
    27. echo $resultStr;

    28. } else {echo $_GET ["echostr"];
    29. exit ();
    30. }
    31. }
    32. private function checkSignature() {
    33. $signature = $_GET ["signature"];
    34. $timestamp = $_GET ["timestamp"];
    35. $nonce = $_GET ["nonce"];
    36. $token = TOKEN;
    37. $tmpArr = array (
    38. $token,
    39. $timestamp,
    40. $nonce
    41. );
    42. sort ( $tmpArr );
    43. $tmpStr = implode ( $tmpArr );
    44. $tmpStr = sha1 ( $tmpStr );

    45. if ($tmpStr == $signature) {
    46. return true;
    47. } else {
    48. return false;
    49. }
    50. }
    51. }
    52. class talk {
    53. public function reply($str) {
    54. $kv = new SaeKV ();
    55. $kv->init ();
    56. if ($str == 'help' || $str == '求助'){
    57. return "要教我读书,请英文下划线开头,接着问题,接着英文冒号,接着回答";
    58. }
    59. if (substr($str, 0,1) == '_'){
    60. $pos = strpos($str, ':');
    61. if ($pos > -1){
    62. $q = substr($str, 1,$pos - 1);
    63. $a = substr($str, $pos + 1);
    64. $ret = $kv->get('know_' . md5($q));
    65. if ($ret === false || !is_array($ret))
    66. $ret = array();
    67. $ret[] = $a;
    68. $kv->set('know_' . md5($q), $ret);
    69. return "known::" . $q . '/' . $a ;
    70. }
    71. }
    72. $ret = $kv->get('know_' . md5($str));
    73. if ($ret === false || !is_array($ret) || count($ret) == 0){
    74. return '我什么都不知道,输入"help"求助';
    75. }else{
    76. //随机一个
    77. while(count($ret) > 1){
    78. $re = array_shift($ret);
    79. if (rand(0, 1) == 0)
    80. return $re;
    81. }
    82. return array_shift($ret);
    83. }
    84. }
    85. }
    86. ?>
    复制代码





    上一篇:小黄鸡simsimi非官方API被封可利用代码
    下一篇:微信机器人:有道翻译小助手——Django + SAE + 微信公众帐号自动回复开放接口
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    27

    积分

    新手上路

    Rank: 1

    积分
    27
    发表于 2014-1-6 10:16:06 | 显示全部楼层
    可以再详细点吗   我是菜鸟啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-8-13 09:40
  • 签到天数: 133 天

    连续签到: 1 天

    [LV.7]常住居民III

    1310

    主题

    1389

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    11731

    社区QQ达人

     楼主| 发表于 2014-1-7 01:01:07 | 显示全部楼层
    hdkygs 发表于 2014-1-6 10:16
    可以再详细点吗   我是菜鸟啊

    你好,请继续关注微信论坛“微信开发者”板块,会不定时更新更多微信开发技术
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-16 09:25
  • 签到天数: 60 天

    连续签到: 2 天

    [LV.6]常住居民II

    11

    主题

    1513

    帖子

    4623

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    4623

    社区QQ达人

    发表于 2016-1-21 09:41:48 | 显示全部楼层
    网程微建站平台(www.phpwc.com,qq:3222486313)是网程公司独立开发的多用户智能微信公众号第三方管理平台(简称:网程微平台),企业无需购买域名、服务器、3分钟就可以在线建立自己的微信网站,现已开发80多种功能应用,近百套行业模版,360°整合CRM系统+网页展示+客户服务+吸粉宣传+收款成交五大服务,满足99%企业/商家互联网营销需求。
    网程微建站:www.phpwc.com(微信公众号第三方平台),免费接入,另招全国代理商,QQ:3222486313
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-4-26 16:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    1

    主题

    2568

    帖子

    6440

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    6440

    社区QQ达人

    QQ
    发表于 2016-8-19 11:09:03 | 显示全部楼层
    林州网程科技有限公司成立于2015年2月,基于微信公众平台为企业提供开发、运营、培训、推广一体化解决方案,帮助企业实现线上线下互通(O2O),社会化客户关系管理(SCRM),移动电商,营销推广、轻应用、社会化营销工具、定制应用等多个层面的业务开发,具备行业领先的研发能力,是一家专注于企业级移动互联网业务的高新技术企业,致力于为各类企事业单位提供先进的、专业化“互联网+”解决方案。(详情请登录网程微平台官网:www.phpwc.com,qq:3285043939)
    网程微建站(www.phpwc.com)——微信第三方开发,QQ:3285043939
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    微信新闻|微信推广|微信代理|微信SEO| 微信论坛  

    Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

    Powered by Discuz! X3.2( 蜀ICP备12031029号-2 )

    渝公网安备 50010302000801号

    快速回复 返回顶部 返回列表