admin 发表于 2024-5-26 13:10:12

微擎processor.php使用

//framework/class/account/account.class.php
官方示例:
class We7_testModuleProcessor extends WeModuleProcessor {
      public function respond() {
                global $_W;
                $rid = $this->rule;
                //这里是一些处理逻辑
                //这里可以回复多种结构,调取对应方法即可:
                //      文字(respText)
                //      图片(respImage)
                //      语音(respVoice)
                //      视频(respVideo)
                //      音乐(respMusic)
                //      图文(respNews)
                //      转接多客服(respCustom)
                return $this->respText('这里的例子是回复文字');
      }
}我们来详细剖析一下:
class BloodTestModuleProcessor extends WeModuleProcessor {
      //void: 所有处理程序必须实现虚函数 respond. 用以响应消息
      public function respond() {
                if(!$this->inContext) {
                        $reply = '请输入你的血型(A, B, O, AB), 来分析你今年的运程. ';
                        $this->beginContext();
                        // 如果是按照规则触发到本模块, 那么先输出提示问题语句, 并启动上下文来锁定会话, 以保证下次回复依然执行到本模块
                } else {
                        $btypes = array('a', 'b', 'o', 'ab');
                        $b = strtolower($this->message['content']);
                        // 如果当前会话在上下文中, 那么表示当前回复是用户回答提示问题的答案.
                        if(in_array($b, $btypes)) {
                              switch($b) {
                                        case 'a':
                                           $reply = 'A型血今年.....';
                                           break;
                                        case 'b':
                                           $reply = 'B型血今年.....';
                                           break;
                                        case 'o':
                                           $reply = 'O型血今年.....';
                                           break;
                                        case 'ab':
                                           $reply = 'AB型血今年.....';
                                           break;
                              }
                              $this->endContext();
                              // 如果当前回答符合答案格式, 那么进行保存并进行下一个问题. (可以保存至 SESSION 中)
                              // 直到最后一个问题回答完成, 输出测试结果给用户, 并结束对话锁定. 以保证用户其他对话能正常路由.
                              // 本示例只有一个问题, 因此不保存答案, 直接输出测试结果.
                              // 如果对话默认的超时不够, 那么可以在每次提出下一个问题的时候重新调用 beginContext 来顺延超时.
                        } else {
                              $reply = '请输入正确的血型(A, B, O, AB). ';
                              // 回答不符合答案格式, 那么重新显示当前问题.
                        }
                }

                return $this->respText($reply);
      }
}使用$this->inContext来判断是否锁定了一个会话,在调用$this->beginContext()方法前其值为false,当用户使用规则触发了模块,那么我们调用$this->beginContext()来锁定用户与当前模块的会话,可以给$this->beginContext()方法传入一个会话超时秒数,默认是1800秒。

$message => array(
      // 此部分数据结构为**全局共有的结构**, 其他消息类型为此结构的**补充**.
      'from'=> 'fromUser', //string: 发送消息方,   代表一个粉丝用户(使用OpenID表示)
      'to'    => 'toUser', //string: 消息接收方,   对应当前的公众号(使用OpenID表示)
      'time'=> '12345678', //int:    消息发送时间, 使用Unix时间戳表示
      'type'=> 'text', //string: 消息类型,   用于区分不同类型的消息, 请参阅下文
    'content' => '你好!', //string:消息内容
      'msgid' => ''//int:    消息ID, 公众平台系统用于唯一标识一条请求消息
);我们使用$this->message['content']来接收用户的消息,然后进行分析,并使用return $this->respText($reply)来给用户返回会话内容,当然我们需要定义回复会话内容变量$reply。
可以处理的回复类型包括:
$this->respText($text);//接收一个文本类型参数,$text是空的则返回错误;
$this->respVoice($mid);//接收一个媒体id参数,$mid是空的则返回错误;
$this->respImage($mid);//接收一个媒体id参数,$mid是空的则返回错误;
$this->respVideo(array $video);//接收一个视频数组参数,$video是空的则返回错误,$video = array('MediaId'=>'视频媒体id', 'Title'=>'视频标题', 'Description'=>'视频描述');
$this->respMusic(array $music);//接收一个音频数组参数,$music是空的返回错误,$music = array('title'=>'音乐标题', 'description'=>'音乐描述', 'musicurl'=>'音乐文件链接');
$this->respNews(array $news);//接收一个新闻列表数组参数,count($news)>10或者$news是空的返回错误,$news = array(array('title'=>'新闻标题', 'description'=>'新闻描述', 'picurl'=>'新闻图片', 'url'=>'新闻链接'));

$this->respCustom(array $message = array());//我们使用这个方法来处理用户与公众号客服的交互,原型函数如下代码:protected function respCustom(array $message = array()) {
                $response = array();
                $response['FromUserName'] = $this->message['to'];
                $response['ToUserName'] = $this->message['from'];
                $response['MsgType'] = 'transfer_customer_service';
                if (!empty($message['TransInfo']['KfAccount'])) {
                        $response['TransInfo']['KfAccount'] = $message['TransInfo']['KfAccount'];
                }

                return $response;
      }
$this->message包含的信息如下:=8072d89aa878363b24377d9fef3d665b0447c7f6×tamp=1589520790&nonce=2091485634&openid=oNgkJ5xodEvXT0W1dKp-zYa1dXN4&encrypt_type=aes&msg_signature=f90f1a536df13c85790fb45f8ee1a860fd3f24b4 tousername=gh_c52cc4432454; fromusername=oNgkJ5xodEvXT0W1dKp-zYa1dXN4; createtime=1589520790; msgtype=text; content=小白兔; msgid=22756463730346259; from=oNgkJ5xodEvXT0W1dKp-zYa1dXN4; to=gh_c52cc4432454; time=1589520790; type=text; event=; redirection=; source=;


页: [1]
查看完整版本: 微擎processor.php使用