接续处理前几天的需求,这两天原本是在思考公众号的响应交互有没有办法在被动回给用户一条多图文消息后,根据用户的点击动作继续给用户响应文本或图文消息。
不查不要紧,一查发现™D水真深,又是一个大坑。
首先我在官方的文档原文看到了一句之前未曾见到的补充说明
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
在 回复图文消息 的参数说明内
ArticleCount 是(是否必须) 图文消息个数;当用户发送文本、图片、视频、图文、地理位置这五种消息时,开发者只能回复1条图文消息
;其余场景最多可回复8条图文消息
Articles 是(是否必须) 图文消息信息,注意,如果图文数超过限制,则将只发限制内的条数
似乎是2018年底开始的改动,而且是偷偷改的,并未在微信开发者更新上进行公告。
?!! 那就是说, 只有事件型的响应例如关注、扫码 才可以触发最多8个items的图文消息,消息型的响应被阉割成1条了
然后我又查到了微信公众号开发者论坛的这条
https://developers.weixin.qq.com/community/develop/doc/0006c2dd60c6188526e7194ec56800?page=1#comment-list
里面也是一片惨叫。1250张八骏图从心里滚过..
立刻自己测试一下..
//该测试显示多图文
unset($its);
$its[0]["Title"]="测试显示多图文信息的复数查询结果";
$its[0]["PicUrl"]="http://wx.praysatoshi.top/wxservice/ruoyu_test/test_location_sm.png";
$its[1]["Title"]="lat:".$lat;
$its[2]["Title"]="lon:".$lon;
$its[3]["Title"]="以上是刚才上报的位置信息";
$its[4]["Title"]="多图文推送测试结束.";
die($this->xmlNews($fromUsername,$toUsername,$its)); //应推送出1+4 的5项图文信息块
...
/**
* wechatCallbackapiTest::xmlNews()
* 生成图文信息
* @param mixed $fromUsername
* @param mixed $toUsername
* @param Array $items
* @return String $xml
* items的元素(keys)有
* Title
* Description
* PicUrl 首图360*200,小图200*200
* Url
*/
private function xmlNews($fromUsername,$toUsername,$items){
$time = time();
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
%s
</Articles>
</xml>";
$itemCount = count($items);
//组织items串
$stritem = "";
foreach($items as $item){
$stritem .="<item>";
if($item["Title"]) $stritem .= "
<Title><![CDATA[{$item["Title"]}]]></Title>";
if($item["Description"]) $stritem .= "
<Description><![CDATA[{$item["Description"]}]]></Description>";
if($item["PicUrl"]) $stritem .= "
<PicUrl><![CDATA[{$item["PicUrl"]}]]></PicUrl>";
if($item["Url"]) $stritem .= "
<Url><![CDATA[{$item["Url"]}]]></Url>";
else $stritem .= "
<Url><![CDATA[]]></Url>";
$stritem .="</item>";
}
$resultStr = sprintf($xmlTpl, $fromUsername, $toUsername, $time, $itemCount, $stritem);
return $resultStr;
}

触发交互——SHIT! 实锤了!!
结论
安逸了..不用想微信内的交互了,明天向甲方解释一下..死了心做jssdk上的H5交互..
微信固然有自己的考虑,但从来当开发者和公众号用户的呼声是屎一样..着实被恶心了一次又一次,大家都想逃离然而又显得那么无可奈何。
当有实力抗衡这匹独角兽的挑战者出现的时候大家的义无反顾也会变得理所当然吧。