PHP模板消息推送偶尔部分客户收不到问题

$access_token = $this->getAccessToken();
foreach ($array['list'] as $key=>$value) {
$params = json_encode($value, JSON_UNESCAPED_UNICODE);
$fp = fsockopen('ssl://api.weixin.qq.com', 443, $error, $errstr, 1);
$http = "POST /cgi-bin/message/template/send?access_token={$access_token} HTTP/1.1\r\nHost: api.weixin.qq.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen($params) . "\r\nConnection:close\r\n\r\n$params\r\n\r\n";
fwrite($fp, $http);
//while (!feof($fp)) {
    //$receive .= fgets($fp);
//}
fclose($fp);
//$receive = explode("\r\n\r\n", $receive);
//unset($receive[0]);
//$wxresult = json_decode(implode("", $receive), true);

//执行更新操作,这里省略...
}

说明:PHP微信模板消息发送,假如一次性发40条,有时候全部都成功,有时候就会有1-2个客户收不到,其他客户正常,客户就会经常过来问,微信官方文档也没有合理的解释(特殊字符、客户客户端之类的解释),断断续续困扰了几个月,故想了下面的办法。

1,发送微信模板消息前,将发送记录写入表record,接收者id、接收者openid、时间、返回结果result(默认写入空)、批次等;

2,模板消息发送的时候,执行更新操作,将微信返回结果更新到record表的result,这样就能知道谁发送成功,谁没有发送成功,即使没有发送成功,也能找到对应的接收者的结果记录,根据记录再排查问题;

3,问题:上面注释的代码放开之后,结果状态能正常更新了,但是每次发送过程就会慢2-3秒,我们这个行业比较特殊,对时间要求严格,有没有什么办法既能写入发送记录,又能速度不慢,之前用的curl post后来改成的这个。

要实现实时通信发消息,可微信消息的形式是异步的。异步总会有延迟,只能用app了吧。有时候就会有1-2个客户收不到这种情况原因太多了。还有可能客户自己网络问题什么或微信网堵筛或服务器丢包。。。还要更强的实时通信还可以用notejs或socketio什么。。微信做成你这个样子已经很不错了。你以微信消息发送的形式就好比手机短信,这玩意都是异步的。微信消息比手机短信好点也就是手机短信可能1天后才收到,微信不会。

我还在研究,一边研究一边测试,短信发送的话,我们也有记录也有控制台,我们这个是微信和短信双推,现在主要微信偶尔会丢。