首先理解一下这个过程:
1.在二维码管理里面,设置二维码,分为两种临时和永久。
其中关联关键字是用来触发到processor.php类的respond方法里面的,这个场景字符串其实也有用。
2.在自己写的模块里面的核心功能设置里面有一个回复规则列表,需要你有module.php这个文件,如果不需要对回复规则添加附加字段的话,你只需要让module这个里面的类继承WeModule即可。添加回复规则如下:
再把第一步里面的关联关键字写在触发关键字里面,即可。
3.然后用户在扫描这个带参数的二维码时,就会把关联关键字传给微擎,而这个关联关键字又会被模块里添加的回复规则的触发关键字捕捉到,所以这两个关键字必须一样。
之后在processor进行测试。
public function respond(){
$data = \'\';
$this->beginContext(5);
if($this->message[\'msgtype\'] === \'event\'){
$data .= \'消息类型为事件。\';
if($this->message[\'event\'] === \'SCAN\' || $this->message[\'event\'] === \'subscribe\' )
{
if($this->message[\'event\'] === \'SCAN\') $data .= \'事件类型为扫描。\';
else $data .= \'事件类型为关注。\';
$qrMessage = $this->message[\'content\'];//扫描到的二维码信息
$qrMessage=explode("#",$qrMessage);
$qrMessage=explode(\'@\',$qrMessage[1]);
$data .= \'文本为\'.$this->message[\'content\'];
}
}
$this->endContext();
return $this->respText(json_encode($this->message));
}
发现如果beginContext函数没有设置参数的话,massage就会没有content这个字段,如果按照上面代码,就会有。
下面是两种情况返回的massage。
1.beginContext函数没有设置参数
2.beginContext函数参数为5
发现eventkey字段和scene字段其实就是场景字符串,content就是触发关键字。
本来想用微擎的模拟测试来模拟扫描带参数二维码这一事件,但发现对于这种事件要发送的xml数据的某些字段获取不到,无法模拟(也许是我发送的xml数据没弄对,反正你们要能弄对就可以直接用模拟测试模拟了)。所以只好用内网映射,让自己的微擎能让外网访问到。